深入理解java虚拟机(3)垃圾收集器与内存分配策略
2021-06-30 23:05
标签:java虚拟机 内存 碎片 root 使用 收集 标记 垃圾 内存分配 一、根搜索算法: (1)定义:通过一系列名为"GC Roots"的对象作为起点,从这些起点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连的时候,则证明此对象不可用 (2)GC Roots对象包括这几种:虚拟机栈中引用的对象;方法区中的类静态属性引用的对象;方法区中常量的引用对象;本地方法中JNI的引用对象 二、垃圾收集算法 1.标记-清楚算法: (1)基本思想:首先标记出要回收的对象,在标记完后回收掉所有被标记的对象 (2)缺点:第一是标记和清楚过程效率都不高;第二是标记清楚之后会山城大量的不连续的内存碎片。 2.复制算法:将可用内存按容量划分为大小相等的两块,每次只使用其中的一块,当一块内存用完了,就将还存活的对象复制到另一块上面,然后把已经使用过的内存空间进行一次清理 (2)优点:不考虑内存碎片使用情况,只要移动堆顶指针,按顺序分配内存就可以,实现简单,运行高效 缺点:将内存缩小为原来的一半 3.标记-整理算法: 4.分代收集算法:根据对象存活周期的不同将内存划分为几块。 (1)将java堆分为新生代和老年代。在新生代中,每次垃圾收集的时候都发现大批对象死去,只有多少量的存活,使用复制算法,将少量存活对象复制到老年代就可以完成对象的收集,老年代中因为对象的存活率高、没有额外空间对他进行分配担保,需要使用,标记-清理来进行回收 (2)将内存分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中的一块Survivor。当回收时,将Eden和Survivor中还存活的对象拷贝到另一块Survivor空间上,最后清理掉Eden和刚才使用过的Survivor的空间 深入理解java虚拟机(3)垃圾收集器与内存分配策略 标签:java虚拟机 内存 碎片 root 使用 收集 标记 垃圾 内存分配 原文地址:https://www.cnblogs.com/bigdata-stone/p/9639561.html
上一篇:Python3 解压序列
下一篇:CCF|打酱油|Java
文章标题:深入理解java虚拟机(3)垃圾收集器与内存分配策略
文章链接:http://soscw.com/index.php/essay/100051.html