码迷,mamicode.com
首页 > 其他好文 > 详细

虚拟机学习四-垃圾回收机制

时间:2015-02-03 12:47:24      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

重点关注几个问题:

-对象已死吗?

采用引用计数法(不能解决相互循环引用问题)或可达性分析法。

引用计数法:计算对象的引用数,计数为0时对象被回收。

可达性分析:通过一系列的"GC Roots"的对象(如栈中引用的对象、方法区中类静态属性引用的对象、常量引用的对象)作为起始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连(不可达),则这些对象时不可用的。

 

-方法区中的回收

主要针对废弃的"常量"(程序中没有对象叫做“ab”,那常量池中"ab"将会被回收)和无用的类进行回收。

所谓无用的类,必须满足以下条件:

1、堆中不存在该类的任何实例2、加载该类的类加载器已经被回收3、该类对应的Class对象没有在任何地方被引用,即无法再任何地方通过反射访问该类的方法。

在大量使用反射、动态代理、CGLib等ByteCode框架、动态生成jsp这类频繁自定义ClassLoader的场景都需要虚拟机具备类卸载功能以保证不会发生内存溢出。(至于类是否会被虚拟机回收,需要设置虚拟机参数-Xnoclassgc,以上三点只是必要条件)

 

虚拟机学习四-垃圾回收机制

标签:

原文地址:http://www.cnblogs.com/SunseCode/p/4269449.html

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