Java对象回收
2020-05-28 本文已影响0人
gstsyyb
对象分配流程:
1、class 加载,数据存放在元空间(已经移除的 JVM 内存之外,原因是大小不好调优,永久代触发 FullGC,所以移除了)
2、方法执行在栈上,引用存储在栈上
3、对象在堆分配,栈上引用
对象回收流程:
1、多数情况下,无 GCROOT 对象直接被回收。
2、少数对象即使没有GCROOT时,也不一定回收
①、实现finalize方法,延迟回收,对象可能被finalize方法执行时重新引用
②、非强引用也可能暂时不回收
说明:对象分配在堆上,GCRoot 在栈上或方法区等
一、通过 finalize 方法标识一种特殊处理的对象,回收时优先加入队列,延长回收,通过finalize方法可以让对象重新复活,否则则直接回收
image.png二、软引用、弱引用、虚引用
即使对象没有被 GCRoot 引用,如果对象标识为非强引用,则暂时不用回收