高亮的杂货铺
Do what you love. Do have faith in what you are doing.
Follow me 👉
高亮的杂货铺

JVM从0到1-经典垃圾回收器

2020-03-15
封面图为七种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用 Serial收集器【新生代】 图为ParNew/Serial Old收集器运行示意图 最老的单线程收集器,使用标记-复制算法,会Stop The Wo...
Read more
JVM从0到1-经典垃圾回收器

JVM从0到1-HotSpot垃圾收集算法细节,根节点枚举和可达性分析

2020-03-15
根节点枚举 可达性分析需要从GC Roots集合找引用链。固定可以作为GC Roots的节点主要是全局性的引用、例如常量和非静态属性,以及执行上下文,即栈帧的本地变量表中。 迄今为止,所有的收集器在根节点枚举这一个步骤都是必须要暂停用户线程...
Read more

JVM从0到1-HotSpot垃圾收集算法细节

2020-03-15
根节点枚举 可达性分析需要从GC Roots集合找引用链。固定可以作为GC Roots的节点主要是全局性的引用、例如常量和非静态属性,以及执行上下文,即栈帧的本地变量表中。 迄今为止,所有的收集器在根节点枚举这一个步骤都是必须要暂停用户线程...
Read more

JVM从0到1-垃圾回收概念

2020-03-15
分代收集理论 分代收集理论是建立在经验法则上的,基于两个假说 若分代假说:绝大多数对象都是照生夕灭的 强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡 设计者一般把Java堆划分为新生代和老年代两个区域,因而才有了“Minor GC”...
Read more

JVM从0到1-HotSpot虚拟机对象

2020-03-15
当我们写下一个new关键字时,发生了什么? 虚拟机遇到一个new指令时,先会去检查这个指令的参数是否能够在常量池中定位到一个类的符号引用,然后检查这个类是否被加载、解析和初始化过,如果没有,那么执行该过程。 检查通过后,虚拟机要为新生对象分...
Read more

JVM从0到1-方法调用与虚方法表

2020-03-15
JVM字节码中,共有五种指令来实现方法的调用 invokevirtual 为最常见的情况,用于调用所有的虚方法 invokespecial 是作为对 private 和构造方法<init>()的调用,以及父类中的方法的调用 i...
Read more

JVM从0到1-运行时栈帧结构

2020-03-14
栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行结束的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。在编译Java程序源码的时候,栈帧中需要多大的局部变量表,需要多深的操作数栈就已经被...
Read more

JVM从0到1-类加载器

2020-03-14

Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”(Class Loader)。

Read more

JVM从0到1-类加载机制

2020-03-14

一个类型从被加载到虚拟机内从中,到卸载出内存,整个生命周期会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initilization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个阶段被统称为连接(Linking)

Read more
JVM从0到1-类加载机制

JVM从0到1-class文件属性表

2020-03-14

属性表(attribute_info)在前面的讲解中已经出现过多次,class文件、字段表、方法表都可以由自己携带的属性表集合,以描述某些场景专有的信息。虚拟机规范对属性表的限制稍微宽松一些,不要求各个属性具有严格顺序,而且只要不与已有属性崇明,任何人实现的编译其都可以向属性表中写入自己定义的属性信息,Java虚拟机运行时,会忽略它不认识的属性。

Read more