调优的目的
减少GC次数
为什么要减少GC的次数
-
因为
STW
( Stop-The-World )机制:- 停止用户线程
- Java中一种全局暂停的现象,jvm挂起状态。
- 全局停顿,所有Java代码停止,native代码可以执行,但不能和JVM交互。
- 多半由于jvm的GC引起。
GC时为什么会有全局停顿( Stop-The-World )?
- 类比在聚会时打扫房间,聚会时很乱,又有新的垃圾产生,房间永远打扫不干净,只有让大家停止活动了,才能将房间打扫干净。当gc线程在处理垃圾的时候,其它java线程要停止才能彻底清除干净,否则会影响gc线程的处理效率增加gc线程负担,特别是在垃圾标记的时候。
Stop-The-World 的危害
- 长时间服务停止,没有响应。
- 遇到HA系统,可能引起主备切换,严重危害生产环境。
- 新生代的gc时间比较短,危害小。
- 老年代的gc有时候时间短,但是有时候比较长几秒甚至100秒--几十分钟都有。
- 堆越大花的时间越长。
垃圾收集器
垃圾收集器的分类
-
收集算法(JVM之垃圾回收-垃圾收集算法)是内存回收的抽象策略,那么垃圾收集器就是内存回收的具体实现。
-
新生代收集器 :Serial、ParNew、Parallel Scavenge
-
老年代收集器 :CMS、Serial Old、Parallel Old
-
关于各种收集器的内容:Jvm垃圾回收器- 博客园