[Java虚拟机读书笔记]3章 垃圾收集器与内存分配策略
来源:互联网 发布:php htmlspecialchars 编辑:程序博客网 时间:2024/06/05 07:44
一.判断对象是否存活
1.引用计数算法:给对象中添加一个引用计数器,每当一个地方引用它时,计数器值就加1;当引用失效时,计数器值就 减1;任何时刻计数器为0的对象就是不可能再使用
2.可达性分析算法(java中使用):通过一系列的称为"GCRoots"的对象作为起始点,从这些节点开始向下搜索,搜索所 走过的路径称为引用链,当一个对象到CG Roots没有任何引用链相连时,则证明次对象是不可用的.
二.垃圾回收算法
1.标记-清除算法:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象
优点:实现简单
缺点:标记和清除两个过程效率不高;标记清除后会产生大量不连续的碎片
2.复制算法:将可用内存按容量划分为对应比例的两块,每次只使用一块,当这一块内存用完后,就将存活着的对象复制到另一块上面,然后再把已经使用过的内存空间一次清理掉,不用考 虑碎片问题
优点:内存分配时不用考虑内存碎片问题等复杂去年概况,只需要移动堆顶指针,按顺序分配内存即可,运行高效
缺点:内存缩小
3.标记-整理算法:标记过程同"标记-清除算法"相同,但后续步骤不是直接对可回收对象进行清除,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存
4.分代收集算法:根据对象存活的周期不同划分为几块,一般分为新生代和老年代这样根据各个年代的特点采用适当的收集算法,如新生代用复制算法,老年代用标记法
三.各收集器
名称 线程 运行代区 使用算法 注解
Serial 单线程 新生代 复制
Serial Old 单线程 老年代 标记整理
ParNew 多线程并行 新生代 复制 缩短停顿时间
ParNew Old 多线程并行 老年代 标记整理
Parallel S 多线程并行 新生代 复制 吞吐量
CMS 并发 老年代 标记清除 缩短停顿时间
四.内存分配与回收策略
1.对象优先在 新生代Eden区中分配,当新生代没有足够的空间进行分配时,虚拟机发起一次Minor GC;
2.大对象直接进入老年代;
3.长期存活的对象进入老年代(给每个对象定义了一个对象年龄计数器,如果在Eden出生并经过第一次Minor GC后仍然存活,并且能被Survivor容纳的话,将被移至Survivor空间中,并且对象年龄设为1;对象在Survivor每熬过一次Minor GC,年龄+1,当它的年龄增加到一定程度进入老年代)
4.动态对象年龄判定:如果Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半年龄大于或等于该年龄的对象就可以直接进入老年代
- [Java虚拟机读书笔记]3章 垃圾收集器与内存分配策略
- 《深入理解Java虚拟机》读书笔记:第三章垃圾收集器与内存分配策略
- 深入理解Java 虚拟机读书笔记--第三章 垃圾收集器与内存分配策略
- 《深入理解Java虚拟机》读书笔记(3)---第3章 垃圾收集器与内存分配策略(二)
- 《深入理解Java虚拟机》读书笔记(2)---第3章 垃圾收集器与内存分配策略(一)
- 《深入理解Java虚拟机》读书笔记2——垃圾收集器与内存分配策略
- 深入理解Java虚拟机 读书笔记——垃圾收集器与内存分配策略
- 深入理解java虚拟机读书笔记(三)垃圾收集器与内存分配策略
- 《深入理解Java虚拟机》读书笔记——垃圾收集器与内存分配策略
- 【深入理解Java虚拟机读书笔记】垃圾收集器与内存分配策略
- 深入理解JAVA虚拟机读书笔记----垃圾收集器与内存分配策略
- Java虚拟机垃圾收集器与内存分配策略
- java虚拟机之垃圾收集器与内存分配策略
- 第3章 垃圾收集器与内存分配策略--《深入理解 Java 虚拟机》笔记
- 《深入理解Java虚拟机》第3章 垃圾收集器与内存分配策略
- 《深入理解java虚拟机》-第3章-垃圾收集器与内存分配策略
- 《深入理解java虚拟机》笔记——第三章 垃圾收集器与内存分配策略
- 阅读<深入理解java虚拟机> 第三章-垃圾收集器与内存分配策略(上)
- 指针数组和数组指针的区别
- cocosdx 关于CCSpriteFrameCache::sharedSpriteFrameCache()的问题
- IOS设计模式之观察者模式
- [转]前端开发框架对比
- Win7系统上配置使用Intellij Idea 13的SVN插件
- [Java虚拟机读书笔记]3章 垃圾收集器与内存分配策略
- 从哲理小故事中感受哲理
- Visual Studio 2013开发 mini-filter driver step by step 获取可执行文件名称 - 实现process monitor的一个功能 (10)
- C++初学者的足迹1
- 深入学习 Java的反射机制2
- 如何添加真机调试的iOS设备
- 时间的残忍在于它带给了父母斑驳的白发
- Linux tcpdump命令详解
- php反射获取方法及其注释控制权限