jvm 垃圾回收(个人笔记)
来源:互联网 发布:unity3d点击图片事件 编辑:程序博客网 时间:2024/04/27 20:14
读了周志明的《深入理解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中则存放在前者中存活下来的实例对象。
(博主水平太渣,写不下去了)
- jvm 垃圾回收(个人笔记)
- JVM 垃圾回收笔记
- JVM GC垃圾回收机制笔记
- JVM学习笔记-垃圾回收器
- JVM垃圾回收机制学习笔记
- JVM垃圾回收(GC 笔记)
- JVM学习笔记二:GC 垃圾回收
- jvm垃圾回收相关优化笔记
- JVM学习笔记3--垃圾回收
- JVM学习笔记(四)垃圾回收算法
- JVM垃圾回收算法和垃圾收集器笔记
- JVM学习笔记(三):JVM的垃圾回收
- JVM 之垃圾回收
- jvm - 垃圾回收
- jvm垃圾回收
- JVM垃圾回收策略
- JVM 垃圾回收算法
- JVM垃圾回收
- Jquery ajax项目实例
- 多列转行命令
- 如何用js判断不同浏览器
- 解决Andorid调试ADB端口占用问题
- 设计模式
- jvm 垃圾回收(个人笔记)
- Oracle 中删除数据
- D-Soldier and Number Game(CF546D) Codeforces Round #304 (Div. 2)
- mysql 基本增删改查
- Windows上手动创建oracle11g数据库database
- UIResponder类学习
- SpringMVC介绍之Validation
- Android 安全——Apk加固研究流程及大纲
- iOS图形库CorePlot