GC:
垃圾回收由JVM中GC线程监控和执行。
参考: http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
GC算法:
1. 标记清除法
首先从根节点开始遍历所有对象,标记出被引用的对象,然后遍历堆,释放所有未标记的对象,会产生内存碎片。
2.复制法
将内存划分为大小相等的两块,开始只使用其中的一块,当这块耗尽之后,将存活的对象复制到另外一块,重新分配地址,然后全部清理这块。
3.标记整理算法
在标记清除的基础上移动存活对象,并更新引用指针,避免产生内存碎片。
分代回收:
1.serial collector 单线程收集器
使用单线程去完成所有的gc工作
Client模式下默认
可用-XX:+UseSerialGC强制使用
2.parallel collector 并行收集器
使用多线程的方式,利用多CUP来提高GC的效率
主要以到达一定的吞吐量为目标
Server模式下默认
--YGC:PS FGC:Parallel MSC
可用-XX:+UseParallelGC或-XX:+UseParallelOldGC强制指定
--ParallelGC代表FGC为Parallel MSC
--ParallelOldGC代表FGC为Parallel Compacting
优点:高效
缺点:当heap变大后,造成的暂停时间会变得比较长
3.concurrent collector
并发收集器
使用多线程的方式,利用多CUP来提高GC的效率
并发完成大部分工作,full gc pause短
可用-XX:+UseConcMarkSweepGC强制指定
缺点:
1.会产生内存碎片
2.回收的整个耗时比较长
3.和应用争抢CPU
转载于:https://www.cnblogs.com/luangeng/p/6033994.html