- 运行时的数据区域 程序计数器 线程私有,记录线程的执行虚拟机字节码指令的地址 Java虚拟机栈 线程私有,方法的调用对应一个栈帧的出入。 栈帧 1) 操作数栈 2) 局部变量表 3) 动态链接 4) 方法返回地址 本地方法栈
Java堆
方法区 1) 运行时的常量池
- jvm判断对象“死去”
引用计数法 没添加一个引用,计数器+1,失去一个引用,计数器-1. 缺点:无法解决对象相互引用的情况 可达算法(根搜索) 一个对象到根节点没有引用链,则该对象是不可用的。 引用链:根节点到某个对象的路径称为该对象的引用链

- jvm中引用对象的方式 java虚拟机栈中栈帧中的局部变量表中的变量指向句柄池中的地址。该句柄含有对象在堆中的实例地址和对象类型数据的指针
栈帧中局部变量表的变量直接指向对象,由对象中的一小块地址指向对象类型数据
- java的四种引用 强引用 例如代码中 Object a = new Object()类型,只要强引用存在,对象不会被回收 软引用 软引用对象可以存活到内存溢出之前。 弱引用 存活到下次GC 虚引用 无法用虚引用获取对象实例,虚引用为了在对象回收的时候给系统一个通知
- 垃圾回收算法 标记-清除法 标记需要清楚的对象,然后统一回收对象。 缺点:空间碎片,提前触发GC
复制算法 分区后,将存活的对象拷贝至没被使用的区
标记-整理法 标记需要清楚的对象,然后将存活的对象整理至一段,直接清除边界意外的数据
- 分代 年轻代(minor GC | Yong GC) 年轻代分为Eden ,from,to 三个区域。New一个对象时,会将对象存放在Eden区,每次GC都会将对象拷贝至 from 或to区,直到GC次数达到阈值,对象被放入老年代 老年代(major GC | full GC) 标记整理法 永久代