C C++ 需要自己回收垃圾
重复回收: 回收掉别人的东西
忘记回收: 内存泄漏
Java虚拟机做自动化回收
垃圾回收器
Root Searching(根可达)
GC Algorithms(垃圾回收算法)
Mark-Sweep(标记清除)
缺点:碎片化,一个洞一个洞
Copying(拷贝)
缺点:内存浪费,每块内存只用一半
Mark-compact(标记压缩)
缺点:把标记的删除,把有用的内容前移
GC的演化
随着内存大小的不断增长而演化
Java1.8
new: old = 1:2
伊甸园区和幸存者区
伊甸园区
新诞生的对象都在这里
发生在新生代YGC
幸存者区
幸存者1 和 幸存者2 总有一个是空的
Serial(序列化回收)
- a stop-the-world ,copying collector which uses a single GC thread
Parallel Scavenge(并行清扫)
- a stop-the-world ,copying collector which uses multiple GC thread
CMS
- concurrent mark sweep
- a mostly concurrent, low-pause collector
大内存,用CMS太坑
三色标记算法
CMS会存在的问题
浮动垃圾会触发STW
GMS最后会remark,会触发STW