北京网站建设收费,网站建设与管理维护的答案李建青,网站开发的规格描述,青岛建设银行股份有限公司网站01 垃圾判断算法 1.1引用计数算法
最简单的垃圾判断算法。在对象中添加一个属性用于标记对象被引用的次数#xff0c;每多一个其他对象引用#xff0c;计数1#xff0c;
当引用失效时#xff0c;计数-1#xff0c;如果计数0#xff0c;表示没有其他对象引用#xff0c;…01 垃圾判断算法 1.1引用计数算法
最简单的垃圾判断算法。在对象中添加一个属性用于标记对象被引用的次数每多一个其他对象引用计数1
当引用失效时计数-1如果计数0表示没有其他对象引用就可以被回收。这个算法无法解决循环依赖的问题。1.2 可达性分析算法
通过一系列被称为“GC Roots”的根对象作为起始节点集从这些节点开始根据引用关系链向下搜索
如果某个对象无法被搜索到则说明该对象无引用执行可回收。相反则对象处于存活状态不可回收。JVM中的实现是找到存活对象未打标记的就是无用对象GC时会回收。02.垃圾回收算法
2.1标记-清除算法
标记Collector 从引用根节点开始遍历标记所有被引用的对象。一般是在对象的 Header 中记录为可达对象。标记的是引用的对象不是垃圾
清除Collector 对堆内存从头到尾进行线性的遍历如果发现某个对象在其 Header中 没有标记为可达对象则将其回收。 不足
1效率问题标记和清除两个过程的效率都不高。2空间问题标记清除后会产生大量不连续的内存碎片空间碎片太多可能会导致以后在程序运行过程中需要 分配较大对象时无法找到足够的连续内存而不得不提前出发另一次垃圾收集动作。2.2 复制算法Copying 1将原有的内存空间分为两块每次只使用一块
2在垃圾回收时将正在使用的内存中的存活对象复制到未被使用的内存块中然后清除正在使用的内存块中的所有对象。
3交换两个内存的角色完成垃圾回收。
2.3 标记—整理算法Mark-Compact
1标记阶段先通过根节点标记所有从根节点开始的可达对象未被标记的为垃圾对象
2整理阶段将所有的存活对象压缩到内存的一段之后清理边界外所有的空间 标记-压缩算法 适合用于存活对象较多的场合如老年代。它在标记-清除算法的基础上做了一些优化。和标记-清除算法一样标记-压缩算法也首先需要从根节点开始对所有可达对象做一次标记。但之后它并不简单的清理未标记的对象而是将所有的存活对象压缩到内存的一端。之后清理边界外所有的空间。