Java底层 - 垃圾回收

Posted 风过无痕521

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java底层 - 垃圾回收相关的知识,希望对你有一定的参考价值。

垃圾回收(GC):是JVM中创建对象的内存分配以及销毁对象的内存回收的机制。

对象是否可回收:

1、对象引用计数法:根据对象的引用数量判断对象是否可回收

2、对象不可达分析法:根据对象是否可达判断对象是否可回收;

垃圾收集机制:

1、标记 - 清除:

根据对象是否可达判断对象是否可回收;然后进行标记,最后再进行清除;

缺点:可能产生不连续的可用内存块儿,对于大对象的创建不友好。

改进版:标记 - 整理;(标记 - 压缩 - 清除)

3、复制:

每次只用一半的内存,当一次垃圾回收结束后,则将仍然存活的对象整体复制到另一半没有使用的内存区域;

优点:避免内存碎片问题;

缺点:浪费空间,代价昂贵;

改进版:根据经验,将初生代内存分为 一个 edon 区,两个 survivor 区,edon 区 与 survivor区 大小比 8:1。这样整体就只有10% 的闲置空间。

辅助策略:老年代担保机制。

.

商用JVM通用的垃圾回收机制:

分代收集

初生代:使用改进版【复制】算法

老年代:使用【标记 - 清除】算法

 

GC类型:

Minor GC:初生代回收;

Full GC:初生代,老年代都回收。

 

对象何时进入老年代:

1、大对象直接进入老年代;

2、survivor区存在 同龄对象的大小超过survivor一半的时候,则这些同龄对象进入老年代;

 

以上是关于Java底层 - 垃圾回收的主要内容,如果未能解决你的问题,请参考以下文章

jvm - 垃圾回收算法

jvm - 经典的垃圾回收器

深入JVM垃圾回收机制,值得你收藏

python垃圾回收机制(超详细)

php底层原理之垃圾回收机制

垃圾回收与算法