JVM深入理解(九):垃圾收集器

  1. 对象存活判断

    打印GC数据: -XX:+PrintGCDetails

    ​ 1.引用计数法

    ​ 2.可达性分析
    在这里插入图片描述

    GCroot对象:
    • 虚拟机栈(栈帧中的本地变量表)中引用的对象
    • 方法区中类静态属性引用的对象
    • 方法区中常量引用的对象
    • 本地方法栈中JNI(即一般说的Native方法)引用的对象
  2. 垃圾回收算法
      - 标记-清除(mark-sweep):位置不连续,产生碎片
    
      - 复制(copying):将内存切割成两份     --->新生代
    
      - 标记-压缩(mark-cpmpact):效率低--->老年代
    
      - 分代收集
    
        ​	堆内存:新生代:1个Eden space 和2个 Survivor space(From space 和 To space)  8:1:1
    
        ​	新生代的垃圾回收称为YGC或minorGC,YGC之后,大多数的对象会被回收,活着的进入from survivor,再次YGC,活着的对象
    
        ​	eden+from survivor --->to survivor
    
        ​	老年代满了称为FGC majorGC,会对新生代和老年代进行垃圾回收,会产生stw(Stop the World)
    
        ​	JVM调优的核心就是尽量减少FGC
    

在这里插入图片描述

       新生代+老年代+永久代(1.7)/元数据区(1.8 metaspace)

       - 永久代/元数据-Class对象
       - 永久代必须指定大小限制,元数据区必须设置最小值,但是可以不设置最大值(受限于物理内存)
       - 字符串常量:1.7-永久代   1.8-堆
       - 方法区是一个逻辑概念,1.7-永久代   1.8-元数据区

     ##### 垃圾回收器

     - serial 年轻代 单线程串行回收
     - parallel scavenge 年轻代 多线程并行回收
     - parnew 年轻代 配合CMD的并行回收
     - serial old 老年代 单线程串行回收
     - parallel old 老年代 多线程并行回收
     - cms(concurrent mark sweep) 老年代 并发的,在垃圾回收时应用程序也可以运行,降低stw的时间(200ms)
     - g1(10ms)
     - zgc(1ms)
     - shenandoah
     - epsilon(jdk内部使用)

     1.8默认parallel scavenge+parallel old

在这里插入图片描述

     1. ##### 虚拟机优化

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值