• G1垃圾收集器中重要的配置参数及其默认值


    -XX:MaxGCPauseMillis

    期望的最大GC暂停时间,默认为:200ms。

    注意:G1的默认策略是期望在吞吐量与延迟之间保持平衡,所以如果你希望获得较高的吞吐量,那么可以通过减少GC暂停的频率来实现,而减少GC暂停频率的主要方式就是增加最大GC暂停时间。

    -XX:GCPauseTimeInterval

    最大暂停时间间隔的目标。

    默认情况下,G1不设置任何目标,允许G1在极端情况下连续执行垃圾回收。

    -XX:ParallelGCThreads

    垃圾收集暂停期间用于并行工作的最大线程数。

    默认根据运行JVM计算机的可用线程数决定,计算方式:当进程可用的CPU线程数小于等于8时,则直接使用该数,否则,将设置为:8 + (n - 8) * (5/8)

    在每次暂停时,使用的最大线程数还需要考虑最大堆的限制,即参数:-XX:HeapSizePerGCThread

    -XX:ConcGCThreads

    用于并发工作的最大线程数,默认情况下,此值为:-XX:ParallelGCThreads除以4。

    如果你想要能够更快的完成并发标记,则可以适当增加并发标记的线程数量。

    -XX:+G1UseAdaptiveIHOP

    使用自适应IHOP。

    Initiating Heap Occupancy Percent(触发并发启动收集的阈值),G1通过观察标记需要多长时间以及标记周期期间通常在老年代分配多少内存来自动确定最佳IHOP,此功能称为自适应IHOP。

    如果此功能开启,则G1将使用-XX:InitiatingHeapOccupancyPercent=45的值做为并发启动收集的阈值。

    如果G1没有很好的预测出,触发并发标记的老年代占用率,则建议禁用:-XX:-G1UseAdaptiveIHOP,并自行调整-XX:InitiatingHeapOccupancyPercent的阈值。

    -XX:G1HeapRegionSize

    G1划分出的每一个Region的大小。

    默认会根据最大堆的大小,按照划分出2048个region来计算出每个region的大小,根据人体工程学确定的最大值为32M,用户可自定义的范围是1~512M,且必须是2的幂。

    -XX:G1NewSizePercent、-XX:G1MaxNewSizePercent

    新生代占堆内存的大小,初始为-XX:G1NewSizePercent设置的值,默认为:5%,G1会根据满足暂停时间的值而对占比进行调整,但最大不会超过-XX:G1MaxNewSizePercent设置的值,默认为:60%。

    -XX:G1HeapWastePercent

    为了更有效的进行垃圾回收,G1会从Collection Set中选择释放一些对内存空间增益更大的region,其中有一项参考就是可回收空间要大于XX:G1HeapWastePercent设置的值,默认为:5%,表示占当前堆空间的5%。

    -XX:G1MixedGCCountTarget

    在混合回收阶段,G1期望能够最大化的的进行回收,但同时还需要考虑XX:MaxGCPauseTimeMillis,因此通常会把一次大的混合回收,拆分为多次,这个次数就由XX:G1MixedGCCountTarget决定,默认为:8次,这样就减少了每一次混合回收的暂停时间,以达到XX:MaxGCPauseTimeMillis的目标值。

    -XX:G1MixedGCLiveThresholdPercent

    在混合回收阶段,会避免回收那些需要大量时间来处理的region,那么如果鉴定是否需要大量时间来处理呢?那么在大多数情况下,占用率高的region就需要耗费更多的时间来处理,XX:G1MixedGCLiveThresholdPercent就是设置的存活对象占用率的阈值,默认为:85%,也就是如果一个region中的存活对象占比达到此re-XX:GCPauseTimeInterval= <尔格>gion的85%,那么就不会回收这个region。

    注意:以下三个参数,默认情况下都是根据环境以符合人体工程学的方式确定的

    -XX:GCPauseTimeInterval
    -XX:ParallelGCThreads
    -XX:ConcGCThreads
    
    • 1
    • 2
    • 3

    人体工程学:人机工程学是 Java 虚拟机 (JVM) 和垃圾收集启发式(例如基于行为的启发式)提高应用程序性能的过程。

  • 相关阅读:
    内部类和权限修饰符
    linux内核中的offsetof、container_of、双链表list.h实践
    C++之智能指针
    巨好用的log分析工具---klogg
    Allegro DFM Ravel Rule 板外异物检查
    VC++将资源文件编译进程序并在运行时释放到文件
    12.2排序
    cmake 学习使用笔记(三)
    vscode c++ 报错identifier “string“ is undefined
    振南技术干货集:比萨斜塔要倒了,倾斜传感器快来!(1)
  • 原文地址:https://blog.csdn.net/CSDN_WYL2016/article/details/125464879