Java GC 垃圾回收之 判断那些可回收,怎么回收

Posted 川雨淅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java GC 垃圾回收之 判断那些可回收,怎么回收相关的知识,希望对你有一定的参考价值。

1、哪些对象可回收?

可行性分析算法

通过一系列GC Roots(®1)作为起始点,其到对象之间的引用(®2)称为引用链,当对象到GC Roots之间不存在引用链相连,

则此对象是不可用的。如下,Object5,Object6,Object7被判定为可回收对象。

2、怎么回收?

3、方法区回收:

a.废弃常量:

没有任何String对象引用常量池的常量,也没有其他地方引用这个常量。

b.无用的类:

下列条件全部满足:

1.该类所有的实例都已经被回收。

2.加载改类的ClassLoader已经被回收

3.该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

 

®1 GC Roots

1.虚拟机栈中引用的对象

2.方法区中类静态属性引用的对象

3.方法区中常量引用的对象

4.本地方法栈中JNI引用的对象(java中C/C++编写的方法)

®2 引用

强引用:new 对象,引用还存在,对象不回收。

软引用:有用但非必需的对象。系统将要内存溢出之前,将这些对象列进回收范围中进行第二次回收。回收完内存还不够,则内存溢出。

弱引用:非必需对象。只能生存到下次垃圾回收之前。

虚引用:回收之前收到系统通知。

以上是关于Java GC 垃圾回收之 判断那些可回收,怎么回收的主要内容,如果未能解决你的问题,请参考以下文章

深入理解java虚拟机 - 垃圾回收机制(GC)

GC垃圾回收

Java垃圾回收-GC

GC垃圾回收机制

Java面试之——GC垃圾回收机制

Java底层 - 垃圾回收