码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-02-12 13:57:43      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:静态   虚拟机   内存溢出   com   lan   loader   判断   ++   style   

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 垃圾回收(二)之 判断那些可回收,怎么回收

标签:静态   虚拟机   内存溢出   com   lan   loader   判断   ++   style   

原文地址:https://www.cnblogs.com/codegod/p/8444071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!