zoukankan      html  css  js  c++  java
  • jvm(4)

    jvm三色标记:
    黑:跟对象,其子对象已经扫描过
    灰:对象本身被扫描过,其子对象未被扫描
    白:未被扫描/垃圾对象

    三色标记的问题:并发下漏标问题

    cms漏标问题解决方法:
    1 incrementtal update方法:既一个白色对象被一个黑色对象引用,则将黑色对象制成灰色,从而重新扫描

    G1漏标问题解决方法:
    1 快照
    2 最终标志:对用户线程短暂的暂停,处理并发阶段遗留的少量stab(漏标)

    跨代引用:老年代对象引用了新生代对象,出发gc时引起的问题

    g1的解决方法
    1 cardTable: 卡表,对老年代特定大小内存的进行表示
    2 RSet: 记忆集,hash,记录其他region到本region对象的引用
    3 由于rset的存在,占用了20%的内存,如果对空间小于六个g不要用g1

    安全点
    1 gc stw时,需要用户线程进入最近的安全点,这样就不会导致引用变化
    2 常见的安全点 方法跳转 循环跳转 异常跳转

    安全区域
    1 线程处于睡眠或者阻塞时,无法进入安全点,引入了安全区域
    2 进入某一段代码时,不会导致引用的变化
    3 userThread进入安全区域,标识进入安全区域->gc开始->gc结束-> userThread 离开安全线程

    gc的指标
    内存占用 吞吐量 stw

    eplison :不gc 一般用于无gc时的性能测试

    zgc :染色指针 ,10ms oracle的私生子

    Shenandoah:染色指针,100ms 非oracle的私生子

    Gc日志常用参数:
    -Xmn -Xms -Xmx –Xss 年轻代 最小堆 最大堆 栈空间 -
    -XX :+UseTLAB 使用 TLAB,默认打开 -
    -XX :+PrintTLAB 打印 TLAB 的使用情况 -
    -XX :TLABSize 设置 TLAB 大小

    -XX :+DisableExplicitGC 启用用于禁用对的调用处理的选项 System.gc() -
    -XX :+PrintGC 查看 GC 基本信息 -
    -XX :+PrintGCDetails 查看 GC 详细信息 -
    -XX :+PrintHeapAtGC 每次一次 GC 后,都打印堆信息 -
    -XX :+PrintGCTimeStamps 启用在每个 GC 上打印时间戳的功能 -
    -XX :+PrintGCApplicationConcurrentTime 打印应用程序时间(低) -
    -XX :+PrintGCApplicationStoppedTime 打印暂停时长(低) -
    -XX :+PrintReferenceGC 记录回收了多少种不同引用类型的引用(重要性低) -verbose:class 类加载详细过程 -
    -XX :+PrintVMOptions 可在程序运行时,打印虚拟机接受到的命令行显示参数 -
    -XX :+PrintFlagsFinal -
    -XX :+PrintFlagsInitial 打印所有的 JVM 参数、查看所有 JVM 参数启动的初始值(必须会用) -
    -XX :MaxTenuringThreshold 升代年龄,最大值 15, 并行(吞吐量)收集器的默认值为 15,而 CMS 收集器的默认值为 6。 Parallel 常用参数 -
    -XX :SurvivorRatio 设置伊甸园空间大小与幸存者空间大小之间的比率。默认情况下,此选项设置为 8 -
    -XX :PreTenureSizeThreshold 大对象到底多大,大于这个值的参数直接在老年代分配 -
    -XX :MaxTenuringThreshold 升代年龄,最大值 15, 并行(吞吐量)收集器的默认值为 15,而 CMS 收集器的默认值为 6。 -
    -XX :+ParallelGCThreads 并行收集器的线程数,同样适用于 CMS,一般设为和 CPU 核数相同 -
    -XX :+UseAdaptiveSizePolicy 自动选择各区大小比例 CMS 常用参数 -
    -XX :+UseConcMarkSweepGC 启用 CMS 垃圾回收器 -
    -XX :+ParallelGCThreads 并行收集器的线程数,同样适用于 CMS,一般设为和 CPU 核数相同

    -XX :CMSInitiatingOccupancyFraction 使用多少比例的老年代后开始 CMS 收集,默认是 68%(近似值),如果频繁发生 SerialOld 卡顿,应该调小,(频繁 CMS 回 收)-
    -XX :+UseCMSCompactAtFullCollection 在 FGC 时进行压缩 -
    -XX :CMSFullGCsBeforeCompaction 多少次 FGC 之后进行压缩 -
    -XX :+CMSClassUnloadingEnabled 使用并发标记扫描(CMS)垃圾收集器时,启用类卸载。默认情况下启用此选项。 -
    -XX :CMSInitiatingPermOccupancyFraction 达到什么比例时进行 Perm 回收,JDK 8 中不推荐使用此选项,不能替代。 -
    -XX :GCTimeRatio 设置 GC 时间占用程序运行时间的百分比(不推荐使用) -
    -XX :MaxGCPauseMillis 停顿时间,是一个建议时间,GC 会尝试用各种手段达到这个时间,比如减小年轻代 G1 常用参数 -
    -XX :+UseG1GC 启用 CMS 垃圾收集器 -
    -XX :MaxGCPauseMillis 设置最大 GC 暂停时间的目标(以毫秒为单位)。这是一个软目标,并且 JVM 将尽最大的努力(G1 会尝试调整 Young 区的块数来)来实 现它。默认情况下,没有最大暂停时间值。 -
    -XX :GCPauseIntervalMillis GC 的间隔时间 -
    -XX :+G1HeapRegionSize 分区大小,建议逐渐增大该值,1 2 4 8 16 32。随着 size 增加,垃圾的存活时间更长,GC 间隔更长,但每次 GC 的时间也会更长 -
    -XX :G1NewSizePercent 新生代最小比例,默认为 5% -
    -XX :G1MaxNewSizePercent 新生代最大比例,默认为 60% -
    -XX :GCTimeRatioGC 时间建议比例,G1 会根据这个值调整堆空间 -
    -XX :ConcGCThreads 线程数量 -
    -XX :InitiatingHeapOccupancyPercent 启动 G1 的堆空间占用比例,根据整个堆的占用而触发并发 GC 周期

  • 相关阅读:
    二次剩余
    【2020.9.29 NOIP模拟赛 T3】寻梦(fantasy)
    Graph and Queries
    势函数和鞅的停时定理学习笔记
    毒瘤计数题汇总
    2-SAT
    CF559E Gerald and Path
    [SDOI2019]世界地图
    CF1349D Slime and Biscuits
    AT4928 [AGC033E] Go around a Circle
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/13389624.html
Copyright © 2011-2022 走看看