jvm运行时数据区及垃圾回收机制
2019-12-20 13:45:12 0 举报
JVM运行时数据区图示与垃圾回收算法
作者其他创作
大纲/内容
Major算法
分代回收算法
ObjectC
复制存活对象
运行时数据区内存分布实例
重新标记
Test.class
b=2
A
用户线程
F-Queue(执行finalize方法)
Serial收集器
空
add方法栈帧
空白块
test实例的引用地址
GC线程
B
第二次标志
清除被标记对象,回收内存
3
仍然存活的对象
GC Roots
C
GC回收大法
是
ObjectG
A (new HeapTest())
CMS收集器
对象块
扫描空间并标记无用对象
2
移动存活对象
30
最终标记
ObjectD
D
ObjectF
初始标记
public class Test{ public static final Integer CONSTANT = 100; public int add(){ int a = 1; int b = 2; int c = (a+b)*10; return c; } public static void main(String args[]){ Test test = new Test(); test.add(); }}
本地方法栈
第一次标志
运行时数据区
GC是否已经执行过finalize方法
复制算法
main线程
GC Root Set
10
并发标记
main方法栈帧
To(S1)
是否可达GC Roots
虚拟机栈
局部变量表
heapTest2
并发清除
From(S0)
仅对队列中对象
a=1
可达性分析算法
ParNew收集器
操作数栈
方法出口
否
标记-清除算法
判定可回收的对象
ObjectA
c=30
1
B (new HeapTest())
Minor算法
对象是否重写了finalize方法
标记-整理算法
Test实例:test
Eden
老年代
筛选回收
G1收集器
回收前
程序计数器=4
最终确认
ObjectB
heapTest
ObjectE
堆
回收后
动态链接
方法区
Test.java
0 条评论
下一页