JVM基础
Java虚拟机规范将JVM虚拟机所管理的内存分为几部分
程序计数器 : 是一块较小的内存空间,它的作用可以看做是当前线程所执行字节码的行号指示器。是线程私有,生命周期与线程相同。''
Java虚拟机栈 : 也是线程私有的,它的生命周期与线程相同,Java虚拟机栈描述的是Java方法(区别于native的本地方法)执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动作链接、方法出口等信息。每个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
本地方法栈 : 与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机所使用到的Native方法服务。
方法区 : 又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量;
堆 : 存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令), jvm只有一个heap区,被所有线程共享,不存放基本类型和对象引用,只存放对象本身。
垃圾回收机制
java垃圾回收机制
GC Root Tracing 算法思路就是通过一系列的名为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连,即从GC Roots到这个对象不可达,则证明此对象是不可用的。
在java之中,可以被当做GC Roots对象的有:
1、虚拟机栈中引用的对象(栈帧中的本地变量表)中引用的对象。
2、方法区中类静态属性引用的对象。
3、方法区中常量引用的对象。
4、本地方法中JNI引用的对象。