JVM运行数据区
Java在执行Java程序的过程中会把所管理的内存划分为为若干个不同的数据区域,如下图
JDK1.8之前方法区由永久代实现(永久代在堆中)
JDK1.8方法区由元空间实现(元空间在本地内存)
JDK1.8之前堆内存被分为新生代,老年代,永久代
JDK1.8之后堆内存被分为新生代,老年代,默认比例为1:2,新生代又被分为1个Eden区+2个Survivor区(S0区,S1区),其中Eden区,S0区,S1区的默认比例为8:1:1
堆和方法区是所有线程共享的数据区
虚拟机栈,本地方法栈,程序计数器是线程隔离的数据区
判断对象是否已死
- 引用计数法(JVM没有采用这种,因为互相引用,会导致回收不了)
- 可达性算法分析