首页 > 其他 > 详细

《深入理解Java虚拟机》笔记2

时间:2014-01-19 15:49:12      阅读:379      评论:0      收藏:0      [点我收藏+]

都知道Java对内存是自动垃圾回收的,什么样的内存是可以回收的?

这个问题是值得思考的。

对象已死的判定方法有两种:

(1)引用计数器法

给对象添加一个引用计数器,有一个地方用到此对象,计数器加一。

引用失效,计数器减一。这个判断方法实现应该简单,但是Java不用。

因为对象间的循环引用不好解决。

但是作者说微软的com技术,python等用的是这种算法。

com完全不懂,但是python难道不会遇到循环引用的问题吗?

等有时间研究下python的内存管理。

(2)根搜索算法

从gc roots开始搜索,可达的对象是存活的,不可达的对象进行回收。

这个也很容易理解。当执行到某个方法某个命令时,如果需要垃圾回收,

则把当前的方法栈当做分析开始点。当然一些全局性的对象需要考虑。

如果是函数式编程应该只考虑当前栈,我感觉。

可作为gc roots的对错有下面几种:

①虚拟机栈中引用的对象

在方法中创建的局部引用关联对象

②本地方法栈jni的引用对象

方法换成了native,道理同①。

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

所谓方法区在上篇中写过了,其实就是存放常态信息的

下面代码中的a如果有引用的对象,就是这种情况

④方法区中常量引用的对象

下面代码中b应该是这种情况

bubuko.com,布布扣
class   AClass{
    static AClass  a;
    final static AClass   b=  new   AClass();

     //当前执行方法method…
}
bubuko.com,布布扣

《深入理解Java虚拟机》笔记2

原文:http://www.cnblogs.com/zwm512327/p/3525717.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!