JVM 简说垃圾收集机制

 2023-02-04
原文作者:KittyGuy 原文地址:https://juejin.cn/post/6986269572013752350

调优的目的

202301011606186491.png

减少GC次数

为什么要减少GC的次数

  • 因为 STWStop-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之垃圾回收-垃圾收集算法)是内存回收的抽象策略,那么垃圾收集器就是内存回收的具体实现。

    202301011606199122.png

  • 新生代收集器 :Serial、ParNew、Parallel Scavenge

  • 老年代收集器 :CMS、Serial Old、Parallel Old

  • 关于各种收集器的内容:Jvm垃圾回收器- 博客园