垃圾回收器有哪些?G1有什么特点
常用垃圾收集器:
新生代(新生代都是复制算法):
- Serial
- ParNew
- Prallel Scavenge
老年代:
- Serial Old(整理算法)
- CMS(清除算法)
- Prallel Old(整理算法)
兼顾新生代和老年代:
- G1
- Epsilon GC
- ZGC
先说说的Serial
Serial(Serial Old)是古老的单线程GC,会进入Stop-The-World状态,当然因为精简的GC实现,无需维护复杂的数据结构;开启方法:
-XX:+UseSerialGC
ParNew GC
其是Serial的多线程版本,常见的场合是配合CMS GC工作,开启方法:
-XX:+UseConcMarkSweepGC -XX:UseParNewGC
CMS
设计目标是尽量减少停顿,这对web等反应时间敏感的应用很重要;但因为其采用的是清除算法,存在内存碎片化问题,难以避免长期运行后full gc导致的恶劣停顿;另外,并发会和用户线程争抢cpu资源;
Parallel GC
吞吐量优先的并行GC实现,在服务器环境中更加高效;
-XX:+UseParallelGC
其引入了开发者友好的配置项,可以直接设置暂停时间或吞吐量目标,jvm会自动进行适应性调整:
-XX:MaxGCPauseMillis=value
-XX:GCTimeRatio=N
G1 兼顾吞吐量和停顿时间的GC实现,表现都不错;值得深入掌握的GC
G1存在年代的概念,但内存结构不再是简单的条带式划分,而且类似棋盘的一个个region,region之间是复制算法,但整体上可以看作是整理算法,可以避免内存碎片化;
其GC方式也发生了变化,其内部维护了一个优先队列,在mixd GC(即新生代GC时候捎带进行老年代GC)时,根据可停顿的时间选择回收收益最大的老年代region进行回收;