2.垃圾收集器与内存分配策略(1)

2021-02-28  本文已影响0人  农民工进城

本章要点

1.如何判定对象死亡
2.垃圾回收算法
3.垃圾收集器
4.引用分类

1.判定对象死亡

要想知道如何垃圾回收,首先应该明确如何什么才能算得上是“垃圾”。
那么如何判断对象是否死亡,即垃圾呢?

1.1 引用计数算法:

给对象中添加一个引用计数器,每当有一个地方引用的时候+1,当引用时效,计数器值-1,当计数器的值为0,即对象不可再用。
特点:实现简单,效率高;但是不能很好的解决对象之前的相互循环引用的问题。

1.2 可达性分析算法:

通过一系列的成为“GC ROOT”的对象作为起始点,从这些节点开始往下搜索,搜索所经过的路径称为“引用链”,当一个对象没有任何引用链能够到达GC ROOT的时候,则证明该对象是不可用的

1.3 GC-ROOT

GC管理的主要区域是Java堆,一般情况下只针对堆进行垃圾回收。

2.垃圾回收算法

2.1标记清除法

分为"标记"和"清除"两个阶段。首先标记所有需要清除的对象,然后统一回收所标记的对象
缺点:
1.效率问题:标记和清除两个阶段的效率都不高
2.清除后会产生大量不连续的空间碎片

2.2 复制算法

它将可用内存分成大小相等的两块,每次只使用其中的一块(用于新生代);但是由于新生代的对象都是朝生夕死,所以一般不需要两等分。而是将它分成一大块的eden空间和两个较小的survivor,每次只使用Eden和其中的一块survicor,其比例是:Eden:suvivor:suvivor=8:1:1,所以有效区域为90%。
优点:实现简单,高效
缺点:代价比较高,只有一半的内存可用

2.3 标记整理算法

标记整理算法的标记阶段和标记清除的算法是一样的,只不过整理阶段不单单是清除,而是让所有还活着的对象移到另一端,然后清理掉边界以外的内存;适合用于老年代。

image.png

3.垃圾收集器

3.2 垃圾收集器种类
image.png
3.2 性能指标

4. 引用分类

JDK 1.2 之后,Java 对引用的概念进行了扩充,将引用分为了以下四种:


image.png
上一篇 下一篇

猜你喜欢

热点阅读