对象引用算法、垃圾收集算法、内存分配策略
2017-03-12 22:21
393 查看
《深入理解Java虚拟机:JVM高级特性与最佳实践》摘录
给对象添加一个引用计数器,每当有一个地方引用时,计数器就加1,当引用失效时,计数器值就减1,计数器为0的对象就是不可能再被使用。JVM没有选用该算法,因无法解决相互循环引用问题。
2、根搜索算法
通过一系列的名为“GC Roots”的对象作为起点,向下搜索,搜索所经过的路径成为引用链,当一个对象到“GC Roots”没有任何引用链相连时,则证明此对象是不可用的
可作为GC Roots的对象有:
虚拟机栈中引用的对象
方法区中类静态属性引用的对象、常量引用的对象
本地方法栈中JNI引用对象
PS:4种引用,强引用、软引用、弱引用、虚引用,这四种引用强度以此减小
强引用(Strong Reference):类似Object o = new Object(),只要强引用在,就不会垃圾回收
软引用(Soft Reference):在将要发生内存溢出之前,会将软引用对象列进回收范围之内并进行第二次回收
弱引用(Week Reference):被弱引用对象只能发生到下次GC之前,当发生GC时,无论内存是否足够,都会被回收
虚引用(Phantom Reference):虚引用的存在完全不会对其生存时间构成印象,也无法通过需引用获取一个对象,设置虚引用的唯一目的就是被GC时收到一个通知
最基础的收集算法;缺点:一是效率问题,标记和清除过程效率都不高,二是空间问题,产生大量不连续碎片
2、复制算法
将内存划分为大小相等两块,每次只使用其中一块。优点:实现简单,效率高;缺点:以牺牲一半内存为代价
现在商用虚拟机都是采用这种算法来回收新生代(一块较大的Eden空间和两块较小的Survivor)
3、标记–整理算法
标记过程与标记清除算法一致,只不过后续步骤不是对可回收对象进行清除,而是让所有存活对象往一端移动,然后直接清理掉端边界以外的内存
4、分代收集
根据新生代与老年代的特点采用最适当的策略,新生代采用复制算法,老年代采用标记清除或者标记整理算法
2、大对象直接进入老年代:大对象比如很长的字符串、数组
3、长期存活的对象进入老年代
4、动态对象年龄判定
5、空间分配担保
一、对象引用算法
1、引用计数算法给对象添加一个引用计数器,每当有一个地方引用时,计数器就加1,当引用失效时,计数器值就减1,计数器为0的对象就是不可能再被使用。JVM没有选用该算法,因无法解决相互循环引用问题。
2、根搜索算法
通过一系列的名为“GC Roots”的对象作为起点,向下搜索,搜索所经过的路径成为引用链,当一个对象到“GC Roots”没有任何引用链相连时,则证明此对象是不可用的
可作为GC Roots的对象有:
虚拟机栈中引用的对象
方法区中类静态属性引用的对象、常量引用的对象
本地方法栈中JNI引用对象
PS:4种引用,强引用、软引用、弱引用、虚引用,这四种引用强度以此减小
强引用(Strong Reference):类似Object o = new Object(),只要强引用在,就不会垃圾回收
软引用(Soft Reference):在将要发生内存溢出之前,会将软引用对象列进回收范围之内并进行第二次回收
弱引用(Week Reference):被弱引用对象只能发生到下次GC之前,当发生GC时,无论内存是否足够,都会被回收
虚引用(Phantom Reference):虚引用的存在完全不会对其生存时间构成印象,也无法通过需引用获取一个对象,设置虚引用的唯一目的就是被GC时收到一个通知
二、垃圾收集算法
1、标记–清除算法最基础的收集算法;缺点:一是效率问题,标记和清除过程效率都不高,二是空间问题,产生大量不连续碎片
2、复制算法
将内存划分为大小相等两块,每次只使用其中一块。优点:实现简单,效率高;缺点:以牺牲一半内存为代价
现在商用虚拟机都是采用这种算法来回收新生代(一块较大的Eden空间和两块较小的Survivor)
3、标记–整理算法
标记过程与标记清除算法一致,只不过后续步骤不是对可回收对象进行清除,而是让所有存活对象往一端移动,然后直接清理掉端边界以外的内存
4、分代收集
根据新生代与老年代的特点采用最适当的策略,新生代采用复制算法,老年代采用标记清除或者标记整理算法
内存分配策略
1、对象优先在Eden分配2、大对象直接进入老年代:大对象比如很长的字符串、数组
3、长期存活的对象进入老年代
4、动态对象年龄判定
5、空间分配担保
相关文章推荐
- Java 垃圾收集器与内存分配策略(一):对象“死亡判断”和四种引用
- 垃圾收集器与内存分配策略——对象的生命、垃圾收集算法
- Java虚拟机(二)垃圾收集算法与内存分配策略
- 垃圾收集器与内存分配策略-垃圾收集算法
- 【java基础 8】垃圾收集算法及内存分配策略
- Java垃圾收集器与内存分配策略、Java中四种引用类型
- [jvm解析系列][四]Java的垃圾回收(二)垃圾收集算法,内存分配和回收策略
- 垃圾收集算法与内存分配策略--《深入理解Java虚拟机》学习笔记
- 浅谈垃圾收集器与内存分配策略(引用计数算法)
- Java的垃圾收集算法、垃圾收集器以及内存分配与回收策略
- 垃圾收集器与内存分配策略-对象已死吗?
- 垃圾收集器与内存分配策略——(一)对象已死吗?
- Java垃圾收集器与内存分配策略、Java中四种引用类型
- 垃圾收集器与内存分配策略-HotSpot算法实现
- 垃圾收集器与内存分配策略_垃圾收集算法
- 垃圾收集算法与内存分配策略
- 【java基础 8】垃圾收集算法及内存分配策略
- JVM之垃圾收集器与内存分配策略
- [Java虚拟机读书笔记]3章 垃圾收集器与内存分配策略
- JVM基础知识2 垃圾收集器与内存分配策略