jvm 垃圾回收(个人笔记)
2015-06-18 17:21
183 查看
读了周志明的《深入理解java虚拟机》收获很大,这里总结一下对java垃圾回收机制的理解。
java堆是对象实例存放的主要地点,也是进行垃圾回收的主要区域。
那么,如何区分对象是否应该被回收?
可达性分析算法(还有一种引用计数法,但是会因为对象之间相互引用产生错误):以GC Roots的对象为根节点向下搜索,也就是说其中的对象节点不可到达,则说明这个对象没有存在的必要,但并不是直接销毁,现将其标记,关入大牢。
在java中,GC Roots的对象包括这几种:
虚拟机栈(栈帧中的本地变量表)中引用的对象。
方法区中类静态属性引用的对象。
方法区中常量引用的对象。
本地方法栈中JNI引用的对象。(这个不懂)
这时候,对象并没有被杀死,只是被标为犯罪嫌疑人了,先关进大牢中(F-Queue 队列),需要配合调查。
标记对象需要通过覆盖finalize()方法配合调查,如果无罪(被标记的对象重新被引用,如Class.Object=this ),那么便成功逃脱了,但是机会只有一次(finalize()方法只会被调用一次)。
对象如何被回收,三种垃圾回收算法:
标记-清除(mark-sweep)算法 : 简单的说就是将被标记的对象清除。
复制(copying)算法 : 将整个空间一分为二,每次使用其中一个空间,将一个存活的对象复制到另一个空间中,再清理使用过的那个空间。
标记-整理(mark-compact)算法 : 标记过程与“mark-sweep”一样,之后让存活的对象移向同一端,在清理其外的内存区。
在jvm中,java堆划分为新生代(Young gen),和老年代(Old gen) 。(只是根据对象的存活周期划分)
新生代中又分为Eden,from survivor,to survivor三部分 ,Eden+from 是实例对象时刻伴随着大量产生和消亡。to中则存放在前者中存活下来的实例对象。
(博主水平太渣,写不下去了)
java堆是对象实例存放的主要地点,也是进行垃圾回收的主要区域。
那么,如何区分对象是否应该被回收?
可达性分析算法(还有一种引用计数法,但是会因为对象之间相互引用产生错误):以GC Roots的对象为根节点向下搜索,也就是说其中的对象节点不可到达,则说明这个对象没有存在的必要,但并不是直接销毁,现将其标记,关入大牢。
在java中,GC Roots的对象包括这几种:
虚拟机栈(栈帧中的本地变量表)中引用的对象。
方法区中类静态属性引用的对象。
方法区中常量引用的对象。
本地方法栈中JNI引用的对象。(这个不懂)
这时候,对象并没有被杀死,只是被标为犯罪嫌疑人了,先关进大牢中(F-Queue 队列),需要配合调查。
标记对象需要通过覆盖finalize()方法配合调查,如果无罪(被标记的对象重新被引用,如Class.Object=this ),那么便成功逃脱了,但是机会只有一次(finalize()方法只会被调用一次)。
对象如何被回收,三种垃圾回收算法:
标记-清除(mark-sweep)算法 : 简单的说就是将被标记的对象清除。
复制(copying)算法 : 将整个空间一分为二,每次使用其中一个空间,将一个存活的对象复制到另一个空间中,再清理使用过的那个空间。
标记-整理(mark-compact)算法 : 标记过程与“mark-sweep”一样,之后让存活的对象移向同一端,在清理其外的内存区。
在jvm中,java堆划分为新生代(Young gen),和老年代(Old gen) 。(只是根据对象的存活周期划分)
新生代中又分为Eden,from survivor,to survivor三部分 ,Eden+from 是实例对象时刻伴随着大量产生和消亡。to中则存放在前者中存活下来的实例对象。
(博主水平太渣,写不下去了)
相关文章推荐
- 建高性能数据库缓存之redis主从复制
- SpringMVC介绍之Validation
- 外网访问内网linux
- 数据结构与算法分析 L6
- mysql 基本增删改查
- UIResponder类学习
- 13.14.15.16.17&《一个程序猿的生命周期》读后感
- 移动端前端开发调试
- 团队项目第二次冲刺(3)
- 解决Andorid调试ADB端口占用问题
- Jquery ajax项目实例
- break和continue的区别
- z-index 解释 postion是否也为relative或者absolute
- 如何用js判断不同浏览器
- C-Soldier and Cards(CF546C)Codeforces Round #304 (Div. 2)
- 《开源框架那点事儿16》:缓存相关代码的演变
- 拒绝抱怨,努力改变——别人不准,我偷偷弄。别人不给,我自己造。别人不行,滚开我来。
- c#设置IP地址
- mysql主从复制(windows下)
- MeteoInfoLab脚本示例:LaTeX写数学公式