对象回收标记方法
- 引用计数:为每一个引用的对象计数,计数为0则表示可以回收。缺陷:可能形成孤岛,两个对象相互引用,但是整个应用程序中没有引用这两个对象,造成内存泄漏
- 根(GC Roots)搜索法:为对象到GC Roots根节点计数,为0则表示可以回收,大多数jvm都是通过该方法实现
可作为GC Roots的对象
- 栈中引用的对象
- 类静态属性引用的对象
- 常量引用的对象
- native方法引用的对象
引用分类
- 强引用String Reference:只要引用存在,永不回收
- 软引用Soft Reference:OOM之前,可强行回收
- 弱引用Weak Reference:最近的一次GC一定回收
- 虚引用Phantom Reference:作用,对象回收可以收到通知
finalize方法
对象回收之前执行finalize方法,可以避免被回收,只会被系统调用一次
建议不要使用,原因:运行代价高,不确定性大,无法保证对象调用顺序
方法区回收
回收对象
- 废弃常量
- 无用类
无用类必须满足3个条件
- 类实例都被回收了
- 类对应的ClassLoader被回收了
- 类对应的java.lang.Class对象无引用,且没有任何地方能通过反射调用该类
閱讀更多 IT學習分享 的文章