JVM Heap中的Garbage 垃圾

  • 没有任何引用指向的对象叫做”垃圾”
  • java与c++的区别之一是,java可自动回收垃圾,c++需要手动处理
  • 发现垃圾常有2中算法:
    1. Reference Count 引用计数算法
    2. Root Searching 根可达算法 (根对象,程序启动需要的对象叫做根对象)
      1. main方法的栈帧(frame)开始的对象就是根对象
      2. 静态变量是根对象
      3. 常量池对象是根对象:
      4. JNI(Java Native Interface)指针:如果调用了本地方法的对象叫做根对象
      5. Java虚拟机内部的引用,如基础数据类型对应的Class对象,一些常驻的异常对象
      6. 所有被同步锁(synchronized关键字)持有的对象
      7. 反映java虚拟机内部情况的JMXBean、JVMTI中注册的回调、本地代码缓存等

        常见垃圾回收算法

  1. Marking-Sweep 标记清除
  • 标记垃圾,然后清。
  • 需要进行2遍扫描,第一遍找到正在使用的对象,第二遍把垃圾找出来清理掉。
  • 执行效率偏低,会产生内存碎片
  1. Copying 拷贝
  • 把内存一分为二,分为使用区和未使用区,把有用的对象拷贝到未使用区,拷贝完之后清除使用区。
  • copying只扫描一次,不会产生碎片,但是浪费空间,移动对象需要调整对象引用
  1. MarkIng-Compact 标记压缩
  • 标记压缩就是标记垃圾并清除掉,然后调整有用对象的指针填补空隙,去除内存碎片
  • 扫描两遍,移动对象,效率低

    堆内存物理分代

    内存物理分代分为新生代、老年代、jdk1.7(Permanent Generation永久代)/jdk1.8 Metaspace 元数据区

  • 新生代, 存放new出来的对象。一个eden区,2个suvivor区,新生代时候使用coppying算法

    • eden区,默认比例8,存放刚刚new出来的对象
    • survivor区,默认比例1
    • suvivor区,默认比例1
      • YGC回收后,活着的对象进入s0,再次YGC,活着的对象进入s1(eden + s0 -> s1),再次YGC,活着的对象进入s0(eden + s1 -> s0),年龄足够进入老年代或者s区装不下了,进入老年代。
      • s0、s1之间复制的年龄超过限制进入老年代,可通过指令:-XX:MxTenuingThresgold配置
  • 老年代,存放垃圾回收多次都没有被回收的对象,老年代适合使用算法:mark compact或者mark sweep

老年代满了进行FGC

  • jdk1.7(Permanent Generation永久代)/jdk1.8 Metaspace 元数据区

    • 永久代必须直到大小,元数区可以设置,也可不设置
    • 字符串常量jdk1.7存放永久代,jdk1.8存放堆

      对象分配过程

  • 栈上分配对象

    • 线程私有小对象
    • 无逃逸对象
    • 支持标量替换
    • 无需调整
  • 线程本地分配(TLAB Thread Local Allocation Buffer

    • 占用 eden ,默认 1%
    • 多线程的时候不用竞争 eden 就可以申请空间,提高效率
    • 小对象
    • 无需调整 ```java /**

      • 测试线程本地分配(Thread Local Allocation Buffer)
      • -XX:-DoEscapeAnalysis 关闭逃逸分析
      • -XX:-EliminateAllocations 关闭标用替换
      • -XX:-UseTLAB 关闭TLAB
      • 结果:没有关闭时:290左右,关闭时:520左右 */ public class Code01_TestTLAB { class User { int id; String name;

        public User(int id, String name) {

        1. this.id = id;
        2. this.name = name;

        } }

      void alloc(int i) { new User(i, “name” + i); }

      public static void main(String[] args) { Code01_TestTLAB t = new Code01_TestTLAB(); long start = System.currentTimeMillis(); for (int i = 0; i < 1000_0000; i++) {

         t.alloc(i);
      

      } System.out.println(System.currentTimeMillis() - start); } }


- **老年代**
   - 大对象
- **eden**

![](https://cdn.nlark.com/yuque/0/2022/jpeg/1636836/1656565502905-d84b91a9-0bca-4ee7-b9ac-533ef98b498e.jpeg)

![image.png](https://cdn.nlark.com/yuque/0/2022/png/1636836/1657198046690-2ada37f9-e44c-4396-bc5c-e89e97500759.png#clientId=u63adaee5-91da-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=389&id=ub1027d20&margin=%5Bobject%20Object%5D&name=image.png&originHeight=486&originWidth=900&originalType=binary&ratio=1&rotation=0&showTitle=false&size=41060&status=done&style=none&taskId=u8d4c5214-f5b5-45e6-b8a7-882986e2d45&title=&width=720)
<a name="VbQPg"></a>
#### 对象何时进入老年代?

- YGC超过+XX:MaxTenuringThreshold指定次数
   - Parallel Scavenge 15次
   - CMS 6次
   - G1 15次
- 动态年龄
   - s0 -> s1 超过50%
   - 年龄最大的放入Old区
<a name="GKKJk"></a>
### YGC、FGC

- YGC:对eden去进行GC, Eden区不足进行YGC
- FGC:对Old区进行GC,Old区不足进行FGC,System.gc()进行FGC
<a name="HH3QX"></a>
## JVM参数
JVM参数官方文档(jdk1.8):<br />[https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html)
```bash
用法: java [-options] class [args...]
           (执行类)
   或  java [-options] -jar jarfile [args...]
           (执行 jar 文件)
其中选项包括:
    -d32          使用 32 位数据模型 (如果可用)
    -d64          使用 64 位数据模型 (如果可用)
    -server       选择 "server" VM
                  默认 VM 是 server.

    -cp <目录和 zip/jar 文件的类搜索路径>
    -classpath <目录和 zip/jar 文件的类搜索路径>
                  用 ; 分隔的目录, JAR 档案
                  和 ZIP 档案列表, 用于搜索类文件。
    -D<名称>=<值>
                  设置系统属性
    -verbose:[class|gc|jni]
                  启用详细输出
    -version      输出产品版本并退出
    -version:<值>
                  警告: 此功能已过时, 将在
                  未来发行版中删除。
                  需要指定的版本才能运行
    -showversion  输出产品版本并继续
    -jre-restrict-search | -no-jre-restrict-search
                  警告: 此功能已过时, 将在
                  未来发行版中删除。
                  在版本搜索中包括/排除用户专用 JRE
    -? -help      输出此帮助消息
    -X            输出非标准选项的帮助
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  按指定的粒度启用断言
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  禁用具有指定粒度的断言
    -esa | -enablesystemassertions
                  启用系统断言
    -dsa | -disablesystemassertions
                  禁用系统断言
    -agentlib:<libname>[=<选项>]
                  加载本机代理库 <libname>, 例如 -agentlib:hprof
                  另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
    -agentpath:<pathname>[=<选项>]
                  按完整路径名加载本机代理库
    -javaagent:<jarpath>[=<选项>]
                  加载 Java 编程语言代理, 请参阅 java.lang.instrument
    -splash:<imagepath>
                  使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html

-X是非标参数

-Xmixed           混合模式执行(默认)
-Xint             仅解释模式执行
-Xbootclasspath:<用 ; 分隔的目录和 zip/jar 文件>
                  设置引导类和资源的搜索路径
-Xbootclasspath/a:<用 ; 分隔的目录和 zip/jar 文件>
                  附加在引导类路径末尾
-Xbootclasspath/p:<用 ; 分隔的目录和 zip/jar 文件>
                  置于引导类路径之前
-Xdiag            显示附加诊断消息
-Xnoclassgc        禁用类垃圾收集
-Xincgc           启用增量垃圾收集
-Xloggc:<file>    将 GC 状态记录在文件中(带时间戳)
-Xbatch           禁用后台编译
-Xms<size>        设置初始 Java 堆大小
-Xmx<size>        设置最大 Java 堆大小
-Xss<size>        设置 Java 线程堆栈大小
-Xprof            输出 cpu 分析数据
-Xfuture          启用最严格的检查,预计会成为将来的默认值
-Xrs              减少 Java/VM 对操作系统信号的使用(请参阅文档)
-Xcheck:jni       对 JNI 函数执行其他检查
-Xshare:off       不尝试使用共享类数据
-Xshare:auto      在可能的情况下使用共享类数据(默认)
-Xshare:on        要求使用共享类数据,否则将失败。
-XshowSettings    显示所有设置并继续
-XshowSettings:system
                  (仅限 Linux)显示系统或容器
                  配置并继续
-XshowSettings:all
                  显示所有设置并继续
-XshowSettings:vm 显示所有与 vm 相关的设置并继续
-XshowSettings:properties
                  显示所有属性设置并继续
-XshowSettings:locale
                  显示所有与区域设置相关的设置并继续

-X 选项是非标准选项。如有更改,恕不另行通知。

-XX是不稳定参数

java -XX:+PrintFlagsFinal -version   # 查看所有的参数

java -XX:+PrintFlagsFinal | grep 参数名称 进行过滤查找

[Global flags]
intx ActiveProcessorCount                      = -1                                  {product}
uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
uintx AdaptiveSizePausePolicy                   = 0                                   {product}
uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
uintx AdaptiveSizePolicyWeight                  = 10                                  {product}
uintx AdaptiveSizeThroughPutPolicy              = 0                                   {product}
uintx AdaptiveTimeWeight                        = 25                                  {product}
bool AdjustConcurrency                         = false                               {product}
bool AggressiveHeap                            = false                               {product}
bool AggressiveOpts                            = false                               {product}
intx AliasLevel                                = 3                                   {C2 product}
bool AlignVector                               = true                                {C2 product}
intx AllocateInstancePrefetchLines             = 1                                   {product}
intx AllocatePrefetchDistance                  = 256                                 {product}
intx AllocatePrefetchInstr                     = 3                                   {product}
intx AllocatePrefetchLines                     = 3                                   {product}
intx AllocatePrefetchStepSize                  = 64                                  {product}
intx AllocatePrefetchStyle                     = 1                                   {product}
bool AllowJNIEnvProxy                          = false                               {product}
bool AllowNonVirtualCalls                      = false                               {product}
bool AllowParallelDefineClass                  = false                               {product}
bool AllowUserSignalHandlers                   = false                               {product}
bool AlwaysActAsServerClassMachine             = false                               {product}
bool AlwaysCompileLoopMethods                  = false                               {product}
bool AlwaysLockClassLoader                     = false                               {product}
bool AlwaysPreTouch                            = false                               {product}
bool AlwaysRestoreFPU                          = false                               {product}
bool AlwaysTenure                              = false                               {product}
bool AssertOnSuspendWaitFailure                = false                               {product}
bool AssumeMP                                  = false                               {product}
intx AutoBoxCacheMax                           = 128                                 {C2 product}
uintx AutoGCSelectPauseMillis                   = 5000                                {product}
intx BCEATraceLevel                            = 0                                   {product}
intx BackEdgeThreshold                         = 100000                              {pd product}
bool BackgroundCompilation                     = true                                {pd product}
uintx BaseFootPrintEstimate                     = 268435456                           {product}
intx BiasedLockingBulkRebiasThreshold          = 20                                  {product}
intx BiasedLockingBulkRevokeThreshold          = 40                                  {product}
intx BiasedLockingDecayTime                    = 25000                               {product}
intx BiasedLockingStartupDelay                 = 4000                                {product}
bool BindGCTaskThreadsToCPUs                   = false                               {product}
bool BlockLayoutByFrequency                    = true                                {C2 product}
intx BlockLayoutMinDiamondPercentage           = 20                                  {C2 product}
bool BlockLayoutRotateLoops                    = true                                {C2 product}
bool BranchOnRegister                          = false                               {C2 product}
bool BytecodeVerificationLocal                 = false                               {product}
bool BytecodeVerificationRemote                = true                                {product}
bool C1OptimizeVirtualCallProfiling            = true                                {C1 product}
bool C1ProfileBranches                         = true                                {C1 product}
bool C1ProfileCalls                            = true                                {C1 product}
bool C1ProfileCheckcasts                       = true                                {C1 product}
bool C1ProfileInlinedCalls                     = true                                {C1 product}
bool C1ProfileVirtualCalls                     = true                                {C1 product}
bool C1UpdateMethodData                        = true                                {C1 product}
intx CICompilerCount                          := 2                                   {product}
bool CICompilerCountPerCPU                     = true                                {product}
bool CITime                                    = false                               {product}
bool CMSAbortSemantics                         = false                               {product}
uintx CMSAbortablePrecleanMinWorkPerIteration   = 100                                 {product}
intx CMSAbortablePrecleanWaitMillis            = 100                                 {manageable}
uintx CMSBitMapYieldQuantum                     = 10485760                            {product}
uintx CMSBootstrapOccupancy                     = 50                                  {product}
bool CMSClassUnloadingEnabled                  = true                                {product}
uintx CMSClassUnloadingMaxInterval              = 0                                   {product}
bool CMSCleanOnEnter                           = true                                {product}
bool CMSCompactWhenClearAllSoftRefs            = true                                {product}
uintx CMSConcMarkMultiple                       = 32                                  {product}
bool CMSConcurrentMTEnabled                    = true                                {product}
uintx CMSCoordinatorYieldSleepCount             = 10                                  {product}
bool CMSDumpAtPromotionFailure                 = false                               {product}
bool CMSEdenChunksRecordAlways                 = true                                {product}
uintx CMSExpAvgFactor                           = 50                                  {product}
bool CMSExtrapolateSweep                       = false                               {product}
uintx CMSFullGCsBeforeCompaction                = 0                                   {product}
uintx CMSIncrementalDutyCycle                   = 10                                  {product}
uintx CMSIncrementalDutyCycleMin                = 0                                   {product}
bool CMSIncrementalMode                        = false                               {product}
uintx CMSIncrementalOffset                      = 0                                   {product}
bool CMSIncrementalPacing                      = true                                {product}
uintx CMSIncrementalSafetyFactor                = 10                                  {product}
uintx CMSIndexedFreeListReplenish               = 4                                   {product}
intx CMSInitiatingOccupancyFraction            = -1                                  {product}
uintx CMSIsTooFullPercentage                    = 98                                  {product}
double CMSLargeCoalSurplusPercent                = 0.950000                            {product}
double CMSLargeSplitSurplusPercent               = 1.000000                            {product}
bool CMSLoopWarn                               = false                               {product}
uintx CMSMaxAbortablePrecleanLoops              = 0                                   {product}
intx CMSMaxAbortablePrecleanTime               = 5000                                {product}
uintx CMSOldPLABMax                             = 1024                                {product}
uintx CMSOldPLABMin                             = 16                                  {product}
uintx CMSOldPLABNumRefills                      = 4                                   {product}
uintx CMSOldPLABReactivityFactor                = 2                                   {product}
bool CMSOldPLABResizeQuicker                   = false                               {product}
uintx CMSOldPLABToleranceFactor                 = 4                                   {product}
bool CMSPLABRecordAlways                       = true                                {product}
uintx CMSParPromoteBlocksToClaim                = 16                                  {product}
bool CMSParallelInitialMarkEnabled             = true                                {product}
bool CMSParallelRemarkEnabled                  = true                                {product}
bool CMSParallelSurvivorRemarkEnabled          = true                                {product}
uintx CMSPrecleanDenominator                    = 3                                   {product}
uintx CMSPrecleanIter                           = 3                                   {product}
uintx CMSPrecleanNumerator                      = 2                                   {product}
bool CMSPrecleanRefLists1                      = true                                {product}
bool CMSPrecleanRefLists2                      = false                               {product}
bool CMSPrecleanSurvivors1                     = false                               {product}
bool CMSPrecleanSurvivors2                     = true                                {product}
uintx CMSPrecleanThreshold                      = 1000                                {product}
bool CMSPrecleaningEnabled                     = true                                {product}
bool CMSPrintChunksInDump                      = false                               {product}
bool CMSPrintEdenSurvivorChunks                = false                               {product}
bool CMSPrintObjectsInDump                     = false                               {product}
uintx CMSRemarkVerifyVariant                    = 1                                   {product}
bool CMSReplenishIntermediate                  = true                                {product}
uintx CMSRescanMultiple                         = 32                                  {product}
uintx CMSSamplingGrain                          = 16384                               {product}
bool CMSScavengeBeforeRemark                   = false                               {product}
uintx CMSScheduleRemarkEdenPenetration          = 50                                  {product}
uintx CMSScheduleRemarkEdenSizeThreshold        = 2097152                             {product}
uintx CMSScheduleRemarkSamplingRatio            = 5                                   {product}
double CMSSmallCoalSurplusPercent                = 1.050000                            {product}
double CMSSmallSplitSurplusPercent               = 1.100000                            {product}
bool CMSSplitIndexedFreeListBlocks             = true                                {product}
intx CMSTriggerInterval                        = -1                                  {manageable}
uintx CMSTriggerRatio                           = 80                                  {product}
intx CMSWaitDuration                           = 2000                                {manageable}
uintx CMSWorkQueueDrainThreshold                = 10                                  {product}
bool CMSYield                                  = true                                {product}
uintx CMSYieldSleepCount                        = 0                                   {product}
uintx CMSYoungGenPerWorker                      = 67108864                            {pd product}
uintx CMS_FLSPadding                            = 1                                   {product}
uintx CMS_FLSWeight                             = 75                                  {product}
uintx CMS_SweepPadding                          = 1                                   {product}
uintx CMS_SweepTimerThresholdMillis             = 10                                  {product}
uintx CMS_SweepWeight                           = 75                                  {product}
bool CheckEndorsedAndExtDirs                   = false                               {product}
bool CheckJNICalls                             = false                               {product}
bool ClassUnloading                            = true                                {product}
bool ClassUnloadingWithConcurrentMark          = true                                {product}
intx ClearFPUAtPark                            = 0                                   {product}
bool ClipInlining                              = true                                {product}
uintx CodeCacheExpansionSize                    = 65536                               {pd product}
uintx CodeCacheMinimumFreeSpace                 = 512000                              {product}
bool CollectGen0First                          = false                               {product}
bool CompactFields                             = true                                {product}
intx CompilationPolicyChoice                   = 3                                   {product}
ccstrlist CompileCommand                            =                                     {product}
ccstr CompileCommandFile                        =                                     {product}
ccstrlist CompileOnly                               =                                     {product}
intx CompileThreshold                          = 10000                               {pd product}
bool CompilerThreadHintNoPreempt               = true                                {product}
intx CompilerThreadPriority                    = -1                                  {product}
intx CompilerThreadStackSize                   = 0                                   {pd product}
uintx CompressedClassSpaceSize                  = 1073741824                          {product}
uintx ConcGCThreads                             = 0                                   {product}
intx ConditionalMoveLimit                      = 3                                   {C2 pd product}
intx ContendedPaddingWidth                     = 128                                 {product}
bool ConvertSleepToYield                       = true                                {pd product}
bool ConvertYieldToSleep                       = false                               {product}
bool CrashOnOutOfMemoryError                   = false                               {product}
bool CreateMinidumpOnCrash                     = false                               {product}
bool CriticalJNINatives                        = true                                {product}
bool DTraceAllocProbes                         = false                               {product}
bool DTraceMethodProbes                        = false                               {product}
bool DTraceMonitorProbes                       = false                               {product}
bool Debugging                                 = false                               {product}
uintx DefaultMaxRAMFraction                     = 4                                   {product}
intx DefaultThreadPriority                     = -1                                  {product}
intx DeferPollingPageLoopCount                 = -1                                  {product}
intx DeferThrSuspendLoopCount                  = 4000                                {product}
bool DeoptimizeRandom                          = false                               {product}
bool DisableAttachMechanism                    = false                               {product}
bool DisableExplicitGC                         = false                               {product}
bool DisplayVMOutputToStderr                   = false                               {product}
bool DisplayVMOutputToStdout                   = false                               {product}
bool DoEscapeAnalysis                          = true                                {C2 product}
bool DontCompileHugeMethods                    = true                                {product}
bool DontYieldALot                             = false                               {pd product}
ccstr DumpLoadedClassList                       =                                     {product}
bool DumpReplayDataOnError                     = true                                {product}
bool DumpSharedSpaces                          = false                               {product}
bool EagerXrunInit                             = false                               {product}
intx EliminateAllocationArraySizeLimit         = 64                                  {C2 product}
bool EliminateAllocations                      = true                                {C2 product}
bool EliminateAutoBox                          = true                                {C2 product}
bool EliminateLocks                            = true                                {C2 product}
bool EliminateNestedLocks                      = true                                {C2 product}
intx EmitSync                                  = 0                                   {product}
bool EnableContended                           = true                                {product}
bool EnableResourceManagementTLABCache         = true                                {product}
bool EnableSharedLookupCache                   = true                                {product}
bool EnableTracing                             = false                               {product}
uintx ErgoHeapSizeLimit                         = 0                                   {product}
ccstr ErrorFile                                 =                                     {product}
ccstr ErrorReportServer                         =                                     {product}
double EscapeAnalysisTimeout                     = 20.000000                           {C2 product}
bool EstimateArgEscape                         = true                                {product}
bool ExitOnOutOfMemoryError                    = false                               {product}
bool ExplicitGCInvokesConcurrent               = false                               {product}
bool ExplicitGCInvokesConcurrentAndUnloadsClasses  = false                               {product}
bool ExtendedDTraceProbes                      = false                               {product}
ccstr ExtraSharedClassListFile                  =                                     {product}
bool FLSAlwaysCoalesceLarge                    = false                               {product}
uintx FLSCoalescePolicy                         = 2                                   {product}
double FLSLargestBlockCoalesceProximity          = 0.990000                            {product}
bool FailOverToOldVerifier                     = true                                {product}
bool FastTLABRefill                            = true                                {product}
intx FenceInstruction                          = 0                                   {ARCH product}
intx FieldsAllocationStyle                     = 1                                   {product}
bool FilterSpuriousWakeups                     = true                                {product}
ccstr FlightRecorderOptions                     =                                     {product}
bool ForceNUMA                                 = false                               {product}
bool ForceTimeHighResolution                   = false                               {product}
intx FreqInlineSize                            = 325                                 {pd product}
double G1ConcMarkStepDurationMillis              = 10.000000                           {product}
uintx G1ConcRSHotCardLimit                      = 4                                   {product}
uintx G1ConcRSLogCacheSize                      = 10                                  {product}
intx G1ConcRefinementGreenZone                 = 0                                   {product}
intx G1ConcRefinementRedZone                   = 0                                   {product}
intx G1ConcRefinementServiceIntervalMillis     = 300                                 {product}
uintx G1ConcRefinementThreads                   = 0                                   {product}
intx G1ConcRefinementThresholdStep             = 0                                   {product}
intx G1ConcRefinementYellowZone                = 0                                   {product}
uintx G1ConfidencePercent                       = 50                                  {product}
uintx G1HeapRegionSize                          = 0                                   {product}
uintx G1HeapWastePercent                        = 5                                   {product}
uintx G1MixedGCCountTarget                      = 8                                   {product}
intx G1RSetRegionEntries                       = 0                                   {product}
uintx G1RSetScanBlockSize                       = 64                                  {product}
intx G1RSetSparseRegionEntries                 = 0                                   {product}
intx G1RSetUpdatingPauseTimePercent            = 10                                  {product}
intx G1RefProcDrainInterval                    = 10                                  {product}
uintx G1ReservePercent                          = 10                                  {product}
uintx G1SATBBufferEnqueueingThresholdPercent    = 60                                  {product}
intx G1SATBBufferSize                          = 1024                                {product}
intx G1UpdateBufferSize                        = 256                                 {product}
bool G1UseAdaptiveConcRefinement               = true                                {product}
uintx GCDrainStackTargetSize                    = 64                                  {product}
uintx GCHeapFreeLimit                           = 2                                   {product}
uintx GCLockerEdenExpansionPercent              = 5                                   {product}
bool GCLockerInvokesConcurrent                 = false                               {product}
uintx GCLogFileSize                             = 8192                                {product}
uintx GCPauseIntervalMillis                     = 0                                   {product}
uintx GCTaskTimeStampEntries                    = 200                                 {product}
uintx GCTimeLimit                               = 98                                  {product}
uintx GCTimeRatio                               = 99                                  {product}
uintx HeapBaseMinAddress                        = 2147483648                          {pd product}
bool HeapDumpAfterFullGC                       = false                               {manageable}
bool HeapDumpBeforeFullGC                      = false                               {manageable}
bool HeapDumpOnOutOfMemoryError                = false                               {manageable}
ccstr HeapDumpPath                              =                                     {manageable}
uintx HeapFirstMaximumCompactionCount           = 3                                   {product}
uintx HeapMaximumCompactionInterval             = 20                                  {product}
uintx HeapSizePerGCThread                       = 87241520                            {product}
bool IgnoreEmptyClassPaths                     = false                               {product}
bool IgnoreUnrecognizedVMOptions               = false                               {product}
uintx IncreaseFirstTierCompileThresholdAt       = 50                                  {product}
bool IncrementalInline                         = true                                {C2 product}
uintx InitialBootClassLoaderMetaspaceSize       = 4194304                             {product}
uintx InitialCodeCacheSize                      = 2555904                             {pd product}
uintx InitialHeapSize                          := 16777216                            {product}
uintx InitialRAMFraction                        = 64                                  {product}
double InitialRAMPercentage                      = 1.562500                            {product}
uintx InitialSurvivorRatio                      = 8                                   {product}
uintx InitialTenuringThreshold                  = 7                                   {product}
uintx InitiatingHeapOccupancyPercent            = 45                                  {product}
bool Inline                                    = true                                {product}
ccstr InlineDataFile                            =                                     {product}
intx InlineSmallCode                           = 2000                                {pd product}
bool InlineSynchronizedMethods                 = true                                {C1 product}
bool InsertMemBarAfterArraycopy                = true                                {C2 product}
intx InteriorEntryAlignment                    = 16                                  {C2 pd product}
intx InterpreterProfilePercentage              = 33                                  {product}
bool JNIDetachReleasesMonitors                 = true                                {product}
bool JavaMonitorsInStackTrace                  = true                                {product}
intx JavaPriority10_To_OSPriority              = -1                                  {product}
intx JavaPriority1_To_OSPriority               = -1                                  {product}
intx JavaPriority2_To_OSPriority               = -1                                  {product}
intx JavaPriority3_To_OSPriority               = -1                                  {product}
intx JavaPriority4_To_OSPriority               = -1                                  {product}
intx JavaPriority5_To_OSPriority               = -1                                  {product}
intx JavaPriority6_To_OSPriority               = -1                                  {product}
intx JavaPriority7_To_OSPriority               = -1                                  {product}
intx JavaPriority8_To_OSPriority               = -1                                  {product}
intx JavaPriority9_To_OSPriority               = -1                                  {product}
bool LIRFillDelaySlots                         = false                               {C1 pd product}
uintx LargePageHeapSizeThreshold                = 134217728                           {product}
uintx LargePageSizeInBytes                      = 0                                   {product}
bool LazyBootClassLoader                       = true                                {product}
intx LiveNodeCountInliningCutoff               = 40000                               {C2 product}
bool LoadExecStackDllInVMThread                = true                                {product}
bool LogCommercialFeatures                     = false                               {product}
intx LoopMaxUnroll                             = 16                                  {C2 product}
intx LoopOptsCount                             = 43                                  {C2 product}
intx LoopUnrollLimit                           = 60                                  {C2 pd product}
intx LoopUnrollMin                             = 4                                   {C2 product}
bool LoopUnswitching                           = true                                {C2 product}
bool ManagementServer                          = false                               {product}
uintx MarkStackSize                             = 4194304                             {product}
uintx MarkStackSizeMax                          = 536870912                           {product}
uintx MarkSweepAlwaysCompactCount               = 4                                   {product}
uintx MarkSweepDeadRatio                        = 5                                   {product}
intx MaxBCEAEstimateLevel                      = 5                                   {product}
intx MaxBCEAEstimateSize                       = 150                                 {product}
uintx MaxDirectMemorySize                       = 0                                   {product}
bool MaxFDLimit                                = true                                {product}
uintx MaxGCMinorPauseMillis                     = 18446744073709551615                    {product}
uintx MaxGCPauseMillis                          = 18446744073709551615                    {product}
uintx MaxHeapFreeRatio                          = 70                                  {manageable}
uintx MaxHeapSize                              := 255852544                           {product}
intx MaxInlineLevel                            = 9                                   {product}
intx MaxInlineSize                             = 35                                  {product}
intx MaxJNILocalCapacity                       = 65536                               {product}
intx MaxJavaStackTraceDepth                    = 1024                                {product}
intx MaxJumpTableSize                          = 65000                               {C2 product}
intx MaxJumpTableSparseness                    = 5                                   {C2 product}
intx MaxLabelRootDepth                         = 1100                                {C2 product}
intx MaxLoopPad                                = 11                                  {C2 product}
uintx MaxMetaspaceExpansion                     = 5451776                             {product}
uintx MaxMetaspaceFreeRatio                     = 70                                  {product}
uintx MaxMetaspaceSize                          = 18446744073709547520                    {product}
uintx MaxNewSize                               := 85262336                            {product}
intx MaxNodeLimit                              = 75000                               {C2 product}
uint64_t MaxRAM                                    = 137438953472                        {pd product}
uintx MaxRAMFraction                            = 4                                   {product}
double MaxRAMPercentage                          = 25.000000                           {product}
intx MaxRecursiveInlineLevel                   = 1                                   {product}
uintx MaxTenuringThreshold                      = 15                                  {product}
intx MaxTrivialSize                            = 6                                   {product}
intx MaxVectorSize                             = 32                                  {C2 product}
uintx MetaspaceSize                             = 21807104                            {pd product}
bool MethodFlushing                            = true                                {product}
uintx MinHeapDeltaBytes                        := 196608                              {product}
uintx MinHeapFreeRatio                          = 40                                  {manageable}
intx MinInliningThreshold                      = 250                                 {product}
intx MinJumpTableSize                          = 10                                  {C2 pd product}
uintx MinMetaspaceExpansion                     = 339968                              {product}
uintx MinMetaspaceFreeRatio                     = 40                                  {product}
uintx MinRAMFraction                            = 2                                   {product}
double MinRAMPercentage                          = 50.000000                           {product}
uintx MinSurvivorRatio                          = 3                                   {product}
uintx MinTLABSize                               = 2048                                {product}
intx MonitorBound                              = 0                                   {product}
bool MonitorInUseLists                         = false                               {product}
intx MultiArrayExpandLimit                     = 6                                   {C2 product}
bool MustCallLoadClassInternal                 = false                               {product}
uintx NUMAChunkResizeWeight                     = 20                                  {product}
uintx NUMAInterleaveGranularity                 = 2097152                             {product}
uintx NUMAPageScanRate                          = 256                                 {product}
uintx NUMASpaceResizeRate                       = 1073741824                          {product}
bool NUMAStats                                 = false                               {product}
ccstr NativeMemoryTracking                      = off                                 {product}
bool NeedsDeoptSuspend                         = false                               {pd product}
bool NeverActAsServerClassMachine              = false                               {pd product}
bool NeverTenure                               = false                               {product}
uintx NewRatio                                  = 2                                   {product}
uintx NewSize                                  := 5570560                             {product}
uintx NewSizeThreadIncrease                     = 5320                                {pd product}
intx NmethodSweepActivity                      = 10                                  {product}
intx NmethodSweepCheckInterval                 = 5                                   {product}
intx NmethodSweepFraction                      = 16                                  {product}
intx NodeLimitFudgeFactor                      = 2000                                {C2 product}
uintx NumberOfGCLogFiles                        = 0                                   {product}
intx NumberOfLoopInstrToAlign                  = 4                                   {C2 product}
intx ObjectAlignmentInBytes                    = 8                                   {lp64_product}
uintx OldPLABSize                               = 1024                                {product}
uintx OldPLABWeight                             = 50                                  {product}
uintx OldSize                                  := 11206656                            {product}
bool OmitStackTraceInFastThrow                 = true                                {product}
ccstrlist OnError                                   =                                     {product}
ccstrlist OnOutOfMemoryError                        =                                     {product}
intx OnStackReplacePercentage                  = 140                                 {pd product}
bool OptimizeFill                              = true                                {C2 product}
bool OptimizePtrCompare                        = true                                {C2 product}
bool OptimizeStringConcat                      = true                                {C2 product}
bool OptoBundling                              = false                               {C2 pd product}
intx OptoLoopAlignment                         = 16                                  {pd product}
bool OptoScheduling                            = false                               {C2 pd product}
uintx PLABWeight                                = 75                                  {product}
bool PSChunkLargeArrays                        = true                                {product}
intx ParGCArrayScanChunk                       = 50                                  {product}
uintx ParGCDesiredObjsFromOverflowList          = 20                                  {product}
bool ParGCTrimOverflow                         = true                                {product}
bool ParGCUseLocalOverflow                     = false                               {product}
uintx ParallelGCBufferWastePct                  = 10                                  {product}
uintx ParallelGCThreads                         = 0                                   {product}
bool ParallelGCVerbose                         = false                               {product}
uintx ParallelOldDeadWoodLimiterMean            = 50                                  {product}
uintx ParallelOldDeadWoodLimiterStdDev          = 80                                  {product}
bool ParallelRefProcBalancingEnabled           = true                                {product}
bool ParallelRefProcEnabled                    = false                               {product}
bool PartialPeelAtUnsignedTests                = true                                {C2 product}
bool PartialPeelLoop                           = true                                {C2 product}
intx PartialPeelNewPhiDelta                    = 0                                   {C2 product}
uintx PausePadding                              = 1                                   {product}
intx PerBytecodeRecompilationCutoff            = 200                                 {product}
intx PerBytecodeTrapLimit                      = 4                                   {product}
intx PerMethodRecompilationCutoff              = 400                                 {product}
intx PerMethodTrapLimit                        = 100                                 {product}
bool PerfAllowAtExitRegistration               = false                               {product}
bool PerfBypassFileSystemCheck                 = false                               {product}
intx PerfDataMemorySize                        = 32768                               {product}
intx PerfDataSamplingInterval                  = 50                                  {product}
ccstr PerfDataSaveFile                          =                                     {product}
bool PerfDataSaveToFile                        = false                               {product}
bool PerfDisableSharedMem                      = false                               {product}
intx PerfMaxStringConstLength                  = 1024                                {product}
intx PreInflateSpin                            = 10                                  {pd product}
bool PreferContainerQuotaForCPUCount           = true                                {product}
bool PreferInterpreterNativeStubs              = false                               {pd product}
intx PrefetchCopyIntervalInBytes               = 576                                 {product}
intx PrefetchFieldsAhead                       = 1                                   {product}
intx PrefetchScanIntervalInBytes               = 576                                 {product}
bool PreserveAllAnnotations                    = false                               {product}
bool PreserveFramePointer                      = false                               {pd product}
uintx PretenureSizeThreshold                    = 0                                   {product}
bool PrintAdaptiveSizePolicy                   = false                               {product}
bool PrintCMSInitiationStatistics              = false                               {product}
intx PrintCMSStatistics                        = 0                                   {product}
bool PrintClassHistogram                       = false                               {manageable}
bool PrintClassHistogramAfterFullGC            = false                               {manageable}
bool PrintClassHistogramBeforeFullGC           = false                               {manageable}
bool PrintCodeCache                            = false                               {product}
bool PrintCodeCacheOnCompilation               = false                               {product}
bool PrintCommandLineFlags                     = false                               {product}
bool PrintCompilation                          = false                               {product}
bool PrintConcurrentLocks                      = false                               {manageable}
intx PrintFLSCensus                            = 0                                   {product}
intx PrintFLSStatistics                        = 0                                   {product}
bool PrintFlagsFinal                          := true                                {product}
bool PrintFlagsInitial                         = false                               {product}
bool PrintGC                                   = false                               {manageable}
bool PrintGCApplicationConcurrentTime          = false                               {product}
bool PrintGCApplicationStoppedTime             = false                               {product}
bool PrintGCCause                              = true                                {product}
bool PrintGCDateStamps                         = false                               {manageable}
bool PrintGCDetails                            = false                               {manageable}
bool PrintGCID                                 = false                               {manageable}
bool PrintGCTaskTimeStamps                     = false                               {product}
bool PrintGCTimeStamps                         = false                               {manageable}
bool PrintHeapAtGC                             = false                               {product rw}
bool PrintHeapAtGCExtended                     = false                               {product rw}
bool PrintHeapAtSIGBREAK                       = true                                {product}
bool PrintJNIGCStalls                          = false                               {product}
bool PrintJNIResolving                         = false                               {product}
bool PrintOldPLAB                              = false                               {product}
bool PrintOopAddress                           = false                               {product}
bool PrintPLAB                                 = false                               {product}
bool PrintParallelOldGCPhaseTimes              = false                               {product}
bool PrintPromotionFailure                     = false                               {product}
bool PrintReferenceGC                          = false                               {product}
bool PrintSafepointStatistics                  = false                               {product}
intx PrintSafepointStatisticsCount             = 300                                 {product}
intx PrintSafepointStatisticsTimeout           = -1                                  {product}
bool PrintSharedArchiveAndExit                 = false                               {product}
bool PrintSharedDictionary                     = false                               {product}
bool PrintSharedSpaces                         = false                               {product}
bool PrintStringDeduplicationStatistics        = false                               {product}
bool PrintStringTableStatistics                = false                               {product}
bool PrintTLAB                                 = false                               {product}
bool PrintTenuringDistribution                 = false                               {product}
bool PrintTieredEvents                         = false                               {product}
bool PrintVMOptions                            = false                               {product}
bool PrintVMQWaitTime                          = false                               {product}
bool PrintWarnings                             = true                                {product}
uintx ProcessDistributionStride                 = 4                                   {product}
bool ProfileInterpreter                        = true                                {pd product}
bool ProfileIntervals                          = false                               {product}
intx ProfileIntervalsTicks                     = 100                                 {product}
intx ProfileMaturityPercentage                 = 20                                  {product}
bool ProfileVM                                 = false                               {product}
bool ProfilerPrintByteCodeStatistics           = false                               {product}
bool ProfilerRecordPC                          = false                               {product}
uintx PromotedPadding                           = 3                                   {product}
uintx QueuedAllocationWarningCount              = 0                                   {product}
uintx RTMRetryCount                             = 5                                   {ARCH product}
bool RangeCheckElimination                     = true                                {product}
intx ReadPrefetchInstr                         = 0                                   {ARCH product}
bool ReassociateInvariants                     = true                                {C2 product}
bool ReduceBulkZeroing                         = true                                {C2 product}
bool ReduceFieldZeroing                        = true                                {C2 product}
bool ReduceInitialCardMarks                    = true                                {C2 product}
bool ReduceSignalUsage                         = false                               {product}
intx RefDiscoveryPolicy                        = 0                                   {product}
bool ReflectionWrapResolutionErrors            = true                                {product}
bool RegisterFinalizersAtInit                  = true                                {product}
bool RelaxAccessControlCheck                   = false                               {product}
ccstr ReplayDataFile                            =                                     {product}
bool RequireSharedSpaces                       = false                               {product}
uintx ReservedCodeCacheSize                     = 251658240                           {pd product}
bool ResizeOldPLAB                             = true                                {product}
bool ResizePLAB                                = true                                {product}
bool ResizeTLAB                                = true                                {pd product}
bool RestoreMXCSROnJNICalls                    = false                               {product}
bool RestrictContended                         = true                                {product}
bool RewriteBytecodes                          = true                                {pd product}
bool RewriteFrequentPairs                      = true                                {pd product}
intx SafepointPollOffset                       = 256                                 {C1 pd product}
intx SafepointSpinBeforeYield                  = 2000                                {product}
bool SafepointTimeout                          = false                               {product}
intx SafepointTimeoutDelay                     = 10000                               {product}
bool ScavengeBeforeFullGC                      = true                                {product}
intx SelfDestructTimer                         = 0                                   {product}
uintx SharedBaseAddress                         = 34359738368                         {product}
ccstr SharedClassListFile                       =                                     {product}
uintx SharedMiscCodeSize                        = 122880                              {product}
uintx SharedMiscDataSize                        = 4194304                             {product}
uintx SharedReadOnlySize                        = 16777216                            {product}
uintx SharedReadWriteSize                       = 16777216                            {product}
bool ShowMessageBoxOnError                     = false                               {product}
intx SoftRefLRUPolicyMSPerMB                   = 1000                                {product}
bool SpecialEncodeISOArray                     = true                                {C2 product}
bool SplitIfBlocks                             = true                                {C2 product}
intx StackRedPages                             = 1                                   {pd product}
intx StackShadowPages                          = 20                                  {pd product}
bool StackTraceInThrowable                     = true                                {product}
intx StackYellowPages                          = 2                                   {pd product}
bool StartAttachListener                       = false                               {product}
intx StarvationMonitorInterval                 = 200                                 {product}
bool StressLdcRewrite                          = false                               {product}
uintx StringDeduplicationAgeThreshold           = 3                                   {product}
uintx StringTableSize                           = 60013                               {product}
bool SuppressFatalErrorMessage                 = false                               {product}
uintx SurvivorPadding                           = 3                                   {product}
uintx SurvivorRatio                             = 8                                   {product}
intx SuspendRetryCount                         = 50                                  {product}
intx SuspendRetryDelay                         = 5                                   {product}
intx SyncFlags                                 = 0                                   {product}
ccstr SyncKnobs                                 =                                     {product}
intx SyncVerbose                               = 0                                   {product}
uintx TLABAllocationWeight                      = 35                                  {product}
uintx TLABRefillWasteFraction                   = 64                                  {product}
uintx TLABSize                                  = 0                                   {product}
bool TLABStats                                 = true                                {product}
uintx TLABWasteIncrement                        = 4                                   {product}
uintx TLABWasteTargetPercent                    = 1                                   {product}
uintx TargetPLABWastePct                        = 10                                  {product}
uintx TargetSurvivorRatio                       = 50                                  {product}
uintx TenuredGenerationSizeIncrement            = 20                                  {product}
uintx TenuredGenerationSizeSupplement           = 80                                  {product}
uintx TenuredGenerationSizeSupplementDecay      = 2                                   {product}
intx ThreadPriorityPolicy                      = 0                                   {product}
bool ThreadPriorityVerbose                     = false                               {product}
uintx ThreadSafetyMargin                        = 52428800                            {product}
intx ThreadStackSize                           = 1024                                {pd product}
uintx ThresholdTolerance                        = 10                                  {product}
intx Tier0BackedgeNotifyFreqLog                = 10                                  {product}
intx Tier0InvokeNotifyFreqLog                  = 7                                   {product}
intx Tier0ProfilingStartPercentage             = 200                                 {product}
intx Tier23InlineeNotifyFreqLog                = 20                                  {product}
intx Tier2BackEdgeThreshold                    = 0                                   {product}
intx Tier2BackedgeNotifyFreqLog                = 14                                  {product}
intx Tier2CompileThreshold                     = 0                                   {product}
intx Tier2InvokeNotifyFreqLog                  = 11                                  {product}
intx Tier3BackEdgeThreshold                    = 60000                               {product}
intx Tier3BackedgeNotifyFreqLog                = 13                                  {product}
intx Tier3CompileThreshold                     = 2000                                {product}
intx Tier3DelayOff                             = 2                                   {product}
intx Tier3DelayOn                              = 5                                   {product}
intx Tier3InvocationThreshold                  = 200                                 {product}
intx Tier3InvokeNotifyFreqLog                  = 10                                  {product}
intx Tier3LoadFeedback                         = 5                                   {product}
intx Tier3MinInvocationThreshold               = 100                                 {product}
intx Tier4BackEdgeThreshold                    = 40000                               {product}
intx Tier4CompileThreshold                     = 15000                               {product}
intx Tier4InvocationThreshold                  = 5000                                {product}
intx Tier4LoadFeedback                         = 3                                   {product}
intx Tier4MinInvocationThreshold               = 600                                 {product}
bool TieredCompilation                         = true                                {pd product}
intx TieredCompileTaskTimeout                  = 50                                  {product}
intx TieredRateUpdateMaxTime                   = 25                                  {product}
intx TieredRateUpdateMinTime                   = 1                                   {product}
intx TieredStopAtLevel                         = 4                                   {product}
bool TimeLinearScan                            = false                               {C1 product}
bool TraceBiasedLocking                        = false                               {product}
bool TraceClassLoading                         = false                               {product rw}
bool TraceClassLoadingPreorder                 = false                               {product}
bool TraceClassPaths                           = false                               {product}
bool TraceClassResolution                      = false                               {product}
bool TraceClassUnloading                       = false                               {product rw}
bool TraceDynamicGCThreads                     = false                               {product}
bool TraceGen0Time                             = false                               {product}
bool TraceGen1Time                             = false                               {product}
ccstr TraceJVMTI                                =                                     {product}
bool TraceLoaderConstraints                    = false                               {product rw}
bool TraceMetadataHumongousAllocation          = false                               {product}
bool TraceMonitorInflation                     = false                               {product}
bool TraceParallelOldGCTasks                   = false                               {product}
intx TraceRedefineClasses                      = 0                                   {product}
bool TraceSafepointCleanupTime                 = false                               {product}
bool TraceSharedLookupCache                    = false                               {product}
bool TraceSuspendWaitFailures                  = false                               {product}
intx TrackedInitializationLimit                = 50                                  {C2 product}
bool TransmitErrorReport                       = false                               {product}
bool TrapBasedNullChecks                       = false                               {pd product}
bool TrapBasedRangeChecks                      = false                               {C2 pd product}
intx TypeProfileArgsLimit                      = 2                                   {product}
uintx TypeProfileLevel                          = 111                                 {pd product}
intx TypeProfileMajorReceiverPercent           = 90                                  {C2 product}
intx TypeProfileParmsLimit                     = 2                                   {product}
intx TypeProfileWidth                          = 2                                   {product}
intx UnguardOnExecutionViolation               = 0                                   {product}
bool UnlinkSymbolsALot                         = false                               {product}
bool Use486InstrsOnly                          = false                               {ARCH product}
bool UseAES                                    = true                                {product}
bool UseAESCTRIntrinsics                       = true                                {product}
bool UseAESIntrinsics                          = true                                {product}
intx UseAVX                                    = 2                                   {ARCH product}
bool UseAdaptiveGCBoundary                     = false                               {product}
bool UseAdaptiveGenerationSizePolicyAtMajorCollection  = true                                {product}
bool UseAdaptiveGenerationSizePolicyAtMinorCollection  = true                                {product}
bool UseAdaptiveNUMAChunkSizing                = true                                {product}
bool UseAdaptiveSizeDecayMajorGCCost           = true                                {product}
bool UseAdaptiveSizePolicy                     = true                                {product}
bool UseAdaptiveSizePolicyFootprintGoal        = true                                {product}
bool UseAdaptiveSizePolicyWithSystemGC         = false                               {product}
bool UseAddressNop                             = true                                {ARCH product}
bool UseAltSigs                                = false                               {product}
bool UseAutoGCSelectPolicy                     = false                               {product}
bool UseBMI1Instructions                       = true                                {ARCH product}
bool UseBMI2Instructions                       = true                                {ARCH product}
bool UseBiasedLocking                          = true                                {product}
bool UseBimorphicInlining                      = true                                {C2 product}
bool UseBoundThreads                           = true                                {product}
bool UseCLMUL                                  = true                                {ARCH product}
bool UseCMSBestFit                             = true                                {product}
bool UseCMSCollectionPassing                   = true                                {product}
bool UseCMSCompactAtFullCollection             = true                                {product}
bool UseCMSInitiatingOccupancyOnly             = false                               {product}
bool UseCRC32Intrinsics                        = true                                {product}
bool UseCodeCacheFlushing                      = true                                {product}
bool UseCompiler                               = true                                {product}
bool UseCompilerSafepoints                     = true                                {product}
bool UseCompressedClassPointers               := true                                {lp64_product}
bool UseCompressedOops                        := true                                {lp64_product}
bool UseConcMarkSweepGC                        = false                               {product}
bool UseCondCardMark                           = false                               {C2 product}
bool UseContainerSupport                       = true                                {product}
bool UseCountLeadingZerosInstruction           = true                                {ARCH product}
bool UseCountTrailingZerosInstruction          = true                                {ARCH product}
bool UseCountedLoopSafepoints                  = false                               {C2 product}
bool UseCounterDecay                           = true                                {product}
bool UseDivMod                                 = true                                {C2 product}
bool UseDynamicNumberOfGCThreads               = false                               {product}
bool UseFPUForSpilling                         = true                                {C2 product}
bool UseFastAccessorMethods                    = false                               {product}
bool UseFastEmptyMethods                       = false                               {product}
bool UseFastJNIAccessors                       = true                                {product}
bool UseFastStosb                              = true                                {ARCH product}
bool UseG1GC                                   = false                               {product}
bool UseGCLogFileRotation                      = false                               {product}
bool UseGCOverheadLimit                        = true                                {product}
bool UseGCTaskAffinity                         = false                               {product}
bool UseGHASHIntrinsics                        = true                                {product}
bool UseHeavyMonitors                          = false                               {product}
bool UseHugeTLBFS                              = false                               {product}
bool UseInlineCaches                           = true                                {product}
bool UseInterpreter                            = true                                {product}
bool UseJumpTables                             = true                                {C2 product}
bool UseLWPSynchronization                     = true                                {product}
bool UseLargePages                             = false                               {pd product}
bool UseLargePagesInMetaspace                  = false                               {product}
bool UseLargePagesIndividualAllocation         = false                               {pd product}
bool UseLinuxPosixThreadCPUClocks              = true                                {product}
bool UseLockedTracing                          = false                               {product}
bool UseLoopCounter                            = true                                {product}
bool UseLoopInvariantCodeMotion                = true                                {C1 product}
bool UseLoopPredicate                          = true                                {C2 product}
bool UseMathExactIntrinsics                    = true                                {C2 product}
bool UseMaximumCompactionOnSystemGC            = true                                {product}
bool UseMembar                                 = false                               {pd product}
bool UseMontgomeryMultiplyIntrinsic            = true                                {C2 product}
bool UseMontgomerySquareIntrinsic              = true                                {C2 product}
bool UseMulAddIntrinsic                        = true                                {C2 product}
bool UseMultiplyToLenIntrinsic                 = true                                {C2 product}
bool UseNUMA                                   = false                               {product}
bool UseNUMAInterleaving                       = false                               {product}
bool UseNewLongLShift                          = false                               {ARCH product}
bool UseOSErrorReporting                       = false                               {pd product}
bool UseOldInlining                            = true                                {C2 product}
bool UseOnStackReplacement                     = true                                {pd product}
bool UseOnlyInlinedBimorphic                   = true                                {C2 product}
bool UseOprofile                               = false                               {product}
bool UseOptoBiasInlining                       = true                                {C2 product}
bool UsePSAdaptiveSurvivorSizePolicy           = true                                {product}
bool UseParNewGC                               = false                               {product}
bool UseParallelGC                             = false                               {product}
bool UseParallelOldGC                          = false                               {product}
bool UsePerfData                               = true                                {product}
bool UsePopCountInstruction                    = true                                {product}
bool UseRDPCForConstantTableBase               = false                               {C2 product}
bool UseRTMDeopt                               = false                               {ARCH product}
bool UseRTMLocking                             = false                               {ARCH product}
bool UseSHA                                    = false                               {product}
bool UseSHA1Intrinsics                         = false                               {product}
bool UseSHA256Intrinsics                       = false                               {product}
bool UseSHA512Intrinsics                       = false                               {product}
bool UseSHM                                    = false                               {product}
intx UseSSE                                    = 4                                   {product}
bool UseSSE42Intrinsics                        = true                                {product}
bool UseSerialGC                               = false                               {product}
bool UseSharedSpaces                           = false                               {product}
bool UseSignalChaining                         = true                                {product}
bool UseSquareToLenIntrinsic                   = true                                {C2 product}
bool UseStoreImmI16                            = false                               {ARCH product}
bool UseStringDeduplication                    = false                               {product}
bool UseSuperWord                              = true                                {C2 product}
bool UseTLAB                                   = true                                {pd product}
bool UseThreadPriorities                       = true                                {pd product}
bool UseTransparentHugePages                   = false                               {product}
bool UseTypeProfile                            = true                                {product}
bool UseTypeSpeculation                        = true                                {C2 product}
bool UseUnalignedLoadStores                    = false                               {ARCH product}
bool UseVMInterruptibleIO                      = false                               {product}
bool UseXMMForArrayCopy                        = true                                {product}
bool UseXmmI2D                                 = false                               {ARCH product}
bool UseXmmI2F                                 = false                               {ARCH product}
bool UseXmmLoadAndClearUpper                   = true                                {ARCH product}
bool UseXmmRegToRegMoveAll                     = true                                {ARCH product}
bool VMThreadHintNoPreempt                     = false                               {product}
intx VMThreadPriority                          = -1                                  {product}
intx VMThreadStackSize                         = 1024                                {pd product}
intx ValueMapInitialSize                       = 11                                  {C1 product}
intx ValueMapMaxLoopSize                       = 8                                   {C1 product}
intx ValueSearchLimit                          = 1000                                {C2 product}
bool VerifyMergedCPBytecodes                   = true                                {product}
bool VerifySharedSpaces                        = false                               {product}
intx WorkAroundNPTLTimedWaitHang               = 1                                   {product}
uintx YoungGenerationSizeIncrement              = 20                                  {product}
uintx YoungGenerationSizeSupplement             = 80                                  {product}
uintx YoungGenerationSizeSupplementDecay        = 8                                   {product}
uintx YoungPLABSize                             = 4096                                {product}
bool ZeroTLAB                                  = false                               {product}
intx hashCode                                  = 5                                   {product}

垃圾回收模型

部分垃圾回收器使用的模型

  • Epsilon、ZGC、Shenandoash不使用逻辑分代
  • G1使用逻辑分代,物料不分代
  • Serial、Serial Old、Parallel Scavenge、Parallel Old、Parallel New、CMS,分为逻辑分代、物理也分代

逻辑分代是给堆内存做一些概念上的划分,物理分代是对堆物理内存做划分:新生代、老年代

常用垃圾回收器

05 GC理论基础 - 图1

  • jdk诞生之后,第一个垃圾回收器是Serial、Serial Old (单线程)
  • 之后为提升效率,产生了Parrallel Scavenge (多线程)
  • 为配合CMS,诞生了Parrallel New
  • CMS是jdk1.4后期引入,CMS开启并发回收的过程
  • 常见垃圾回收器组合:

    • Serial + Serial Old
    • Paralle Scavenge + Parrallel Old
    • Paralle New + CMS

      Serial —— Yong

  • 进行垃圾回收时,所有工作线程全部停止,然后进行垃圾回收

  • 垃圾回收算法:Copying
  • 单线程

    Serial Old —— Old

  • 进行垃圾回收时,所有工作线程全部停止,然后进行垃圾回收

  • 进行垃圾回收算法:Marking-Sweep
  • 单线程

    Parallel Scavenge —— Yong

  • JVM默认垃圾回收器是Parallel Scavenge+ Parallel Old(简称PS+PO)

  • 进行垃圾回收时,所有工作线程全部停止,然后进行垃圾回收
  • 垃圾回收算法:Copying
  • 多线程

    Parallel Old —— Old

  • 进行垃圾回收时,所有工作线程全部停止,然后进行垃圾回收

  • 垃圾回收算法:Marking-Compact

    Parallel New —— Yong

  • 与Parallel Scavenge没有太大区别,只做了一些增强好与CMS配合使用。CMS某一特定时候ParNew会同时运行。

  • 进行垃圾回收时,所有工作线程全部停止,然后进行垃圾回收
  • 垃圾回收算法:Copying
  • 多线程
  • Parallel New 与 Parallel Scanvenge区别:PN 响应时间优先,配合CMS;PS 吞吐量优先。

    CMS —— Old

  • CMS(Concurrent Mark Sweep),并发标记回收,并发标记是工作线程不停止

  • CMS运行4个阶段:
    1. Initial Mark 初始标记,STW,在根对象上标记(时间短)
    2. Concurrent Mark 并发标记,工作线程不停止,一边工作,一边标记
    3. Remark 重新标记,STW,标记Concurrent Mark过程新产生的垃圾(时间短)
    4. Concurrent Sweep 并发清除,工作线程工作的时候清除标记的垃圾(问题产生浮动垃圾,下一个CMS过程清除)
    5. CMS出现问题是会调用Serial Old记性标记压缩
  • CMS 两大问题

    1. Memory Fragmentation 内存碎片。CMS是被设计对付几百M内存的垃圾回收器,一旦内存变大,Old区就会有很大内存碎片,Yong区过来的对象找不到空间时(Promotion Failed),就会启用Serial Old进行标记压缩
    2. Floating Garbage 浮动垃圾。
      -XX:+UseCMSCompactAtFullCollection
      -XX:CMSFullGCsBeforeCompaction  #默认为0,指经过多少次FGC才进行压缩
      
  • Remark阶段算法

    • CMS Remark阶段,采用三色标记和Incremental Update算法,而G1采用三色算法和SATB算法,ZGC采用颜色指针。
    • 三色算法 —— 黑、白、灰
      • 并发标记时,可能产生变化,白色对象被错误回收
      • 解决方案:SATB snapshot at the begining
    • Incremental Update
      • 当一个白色对象被当成黑色对象引用,将黑色对象重新标记为灰色让collector重新扫描

image.png

常见垃圾回收器组合参数设定:(1.8)

  • -XX:+UseSerialGC = Serial New (DefNew) + Serial Old
    • 小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器
  • -XX:+UseParNewGC = ParNew + SerialOld
  • -XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old
  • -XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) 【PS + SerialOld】
  • -XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old
  • -XX:+UseG1GC = G1
  • Linux中没找到默认GC的查看方法,而windows中会打印UseParallelGC
    • java +XX:+PrintCommandLineFlags -version
    • 通过GC的日志来分辨
  • Linux下1.8版本默认的垃圾回收器到底是什么?
    • 1.8.0_181 默认(看不出来)Copy MarkCompact
    • 1.8.0_222 默认 PS + PO

对象引用

  • 强引用(Strong Reference):指程序代码之间普遍存在的引用赋值,只要强引用关系存在,垃圾回收器就永远不会回收被引用的对象。
  • 软引用(Soft Reference):软引用用来描述一些还有用但是非必须的对象,被软引用关联的对象,在将要发生内存溢出是会把这些对象进行垃圾回收
  • 弱引用(Weak Reference):强度比软引用更弱一些,关联的对象只能生存到下一次垃圾回收
  • 虚引用(Phantom Reference)