jvm基础
- Garbage Collector
- GC turing
JVM GC的问题
- ThreadLocal有内存泄漏问题嘛?
- CMS的并发处理和并发可中断预处理
- 多大的对象会被扔到老年代
content
- what is garbage?
找到垃圾(没有引用指向的对象
)并回收 - how to find a grabage?
- reference count(引用计数)
- 无法解决:
A,B,C分别指向
- 无法解决:
- Root Searching
- which instances are roots?
- jvm stack
- native method stack
- run-time constant pool
- static references in method area
clazz?
- which instances are roots?
GC Algorithms
- Mark-Sweep(标记清除)
- 问题:产生碎片
- copying:把内存一分为二,只使用一半
- 缺点:内存浪费
- Mark-Compact:标记之后压缩,有利于新对象的存放
- 缺点:效率比copy算法低
Garbage Collectors
- 垃圾回收器路线,是随着内存越来越大的过程演进
- 从分代算法演化到不分代算法
- 年轻代(
new
):使用copying
算法eden(伊甸)
:存活得特别少survivor1(幸存区)
survivor2(第二个幸存区)
- 老年代(
old
): 使用mark compact
算法tenured
(终身)
- 年轻代(
YGC与FGC
- YGC
- Young GC Minor GC
- Eden区不足
- FGC
- Full GC Major GC
- Old空间不足
- System.gc()
总结
年代划分
- Serial
- a
stop-the-world(stw)
,copying collecter which uses a single GC
- ParNew
- Parallel Scavenge
- Serial Old
- CMS