美文网首页
JVM 垃圾回收机制

JVM 垃圾回收机制

作者: 康俊1024 | 来源:发表于2019-04-07 15:44 被阅读0次

    垃圾回收判断算法

    引用计数法

    计数为0时,会被回收
    问题:相互引用,循环引用

    可达性算法

    GCRoot指向不可回收的对象

    1. 虚拟机栈中本地变量表引用的对象。
    2. 方法区中的类静态变量引用的对象
    3. 方法区中常量引用的对象
    4. 本地方法栈中JNI引用的对象
      问题:不可达一定会回收?
      finalize()方法挽回一次,异步的

    引用

    1. 强引用
    2. 软引用 SoftReference 内存不够时被GC
    3. 弱引用
    4. 虚引用

    对象 ===> 分配 ===>满了 ===> 回收

    内存分配 minorGC

    对象分配eden

    栈上分配内存解决多线程并发创建对象,锁机制消耗CPU的情况。
    TLAB:Thread Local Allocation Buffer eden区预分配
    指针碰撞
    Free List

    对象分配老年代 major GC

    1. 对象很大
    2. 长期存活的对象 age=15
    3. 动态对象年龄判断
      相同年龄所有对象的大小总和 > survivor 一半
      分配担保:minorGC之前检查老年代最大可用连续空间 > 新生代所有对象总和。触发Full GC

    垃圾回收

    垃圾回收算法

    1. 标记-清除算法
    2. 复制回收算法
    3. 标记-整理算法

    垃圾回收器 STW

    新生代(复制回收算法)

    1. Serial:单线程
    2. ParNew :多线程 -XX ParallelGCThreads
    3. Parallel Scavenge(Server默认):全局吞吐量:运行用户代码时间 / (运行用户代码时间 + GC时间)
      -XX:MaxGCPauseMillis=n
      -XX:GCTimeRatio=n
      -XX:UseAdaptiveSizePolicy GC Ergonomics

    老年代

    1. CMS :
      减少回收停顿时间
      标记-清除算法
      碎片 -XX:CMSInitiationgOccupancyFraction
      Concurrent Mode Failure 启用Serial Old
      -XX:+UseCMSCompactAtFullCollection
      -XX:CMSFullGCsBeforeCompaction 执行多少次不压缩FullGC后 来一次带压缩的 0 表示每次都压
      -XX:+UseConcMarkSweep
    2. Serial Old(MSC)
      CMS备用预案 Concurrent Mode Failusre时使用
      标记-整理算法
    3. Parallel Old
      标记-整理算法

    G1

    回收的时间节点 工作线程和GC线程协调 STW

    安全点:方法调用之前之后, 循环跳转,异常跳转

    安全区:不是立刻STW

    如何查看当前的垃圾回收器

    -XX:+PrintFlagsFinal
    -XX:+PrintCommandLineFlags
    server client
    MBean

    GC日志

    1.输出日志
    -XX:+PrintGCTimeStamps
    -XX:+PrintGCDetails
    -Xloggc:/home/administrator/james/gc.log
    -XX:+PrintHeapAtGC
    2.日志文件控制
    -XX:-UseGCLogFileRotation
    -XX:GCLogFileSize=8K
    3.怎么看

    JDK自带的 监控工具

    jmap -heap pid 堆使用情况
    jstat -gcutil pid 1000
    jstack 线程dump
    jvisualvm
    jconsole

    死锁案例

    jvisualvm
    dump文件:查看deadlock BLOCKED waiting to lock
    影响:资源的消耗

    相关文章

      网友评论

          本文标题:JVM 垃圾回收机制

          本文链接:https://www.haomeiwen.com/subject/nahobqtx.html