JVM Full GC
2021-07-01 11:19:23 1 举报
JVM Full GC
作者其他创作
大纲/内容
对象
array3
Eden(8MB)
main线程Java虚拟机栈(1MB)
老年代(10MB)
JVM
未知对象
array4
GC
array2
垃圾回收
老年代(回收之后依然很满)
类加载
垃圾回收器
S1
mian方法栈帧局部变量
局部变量array1创建1个4MB对象数组,超过JVM参数大对象设置的大小,直接进入老年代。引用指向为null。垃圾回收器把array1识别为垃圾回收了。此时arry6创建2MB对象,JVM发现Edema区不够放。触发一次Young GC,垃圾回收器发现array2、array3、array4、array5都有变量引用,无法回收。把它们转移到Survivor区,发现超过Survivor区内存空间,只能进入老年代。array1、array2创建的2MB对象进入老年代,此时其它的对象进入老年代时,发现老年代内存空间不够,触发Full GC。原来已经使用了8MB的内存空间,经过CMS垃圾回收器识别老年代4MB的对象已经没引用了,直接回收了4MB对象。此时局部变量array4和array5的对象就能进入老年代了,老年代内存空间使用6MB。局部变量array6创建的2MB对象分配到Eden区
2MB
局部变量array1创建1个4MB对象数组,超过JVM参数大对象设置的大小,直接进入老年代。引用指向为null。垃圾回收器把array1识别为垃圾回收了。此时arry6创建2MB对象,JVM发现Edema区不够放。触发一次Young GC,垃圾回收器发现array2、array3、array4、array5都有变量引用,无法回收。把它们转移到Survivor区,发现超过Survivor区内存空间,只能进入老年代。此时发现老年代内存空间不够,触发Full GC
Full GC
main()栈帧局部变量:message
Surrivior1(1MB)
HelloWorld.class字节码文件
创建对象
JVM进程
class HelloWorldmain()方法
Eden
main线程Java虚拟机栈
array1
Surrivior0(1MB)
回收4MB对象
执行main方法
array5
一大堆类塞满
4MB
大量方法栈帧
128KB
array6
编译
对象转移,空间不足
回收array1
java命令
MetaSpace(512MB)
CMS垃圾回收器
对象转移
S0
HelloWorld.java源文件
0 条评论
回复 删除
下一页