高大上网站设计,好听有创意的广告公司名字,网页界面设计是什么,企业网站后台管理软件面试题 JVM的参数#xff0c;你知道的说一下 (百度) 说说你知道的几种主要的JVM参数#xff08;京东#xff09; JVM调优调的哪些参数#xff1f;在哪里写这些参数#xff1f; #xff08;亚信#xff09; 内存调优参数都有什么#xff1f;你知道的说一下 (百度) 说说你知道的几种主要的JVM参数京东 JVM调优调的哪些参数在哪里写这些参数 亚信 内存调优参数都有什么顺丰 JVM调优调的哪些参数问这样有什么好处在哪里写这些参数浪潮 JVM参数选项类型
官网说明https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
类型一标准参数选项
特点 比较稳定后续版本基本不会变化以-开头
各种选项 运行java或者java -help可以看到所有的标准选项 -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:jdwphelp 和 -agentlib:hprofhelp -agentpath:pathname[选项] 按完整路径名加载本机代理库 -javaagent:jarpath[选项] 加载 Java 编程语言代理, 请参阅 java.lang.instrument -splash:imagepath 使用指定的图像显示启动屏幕 有关详细信息, 请参阅Java SE - Documentation
补充内容-server与-client Hotspot JVM有两种模式分别是server和client分别通过-server和-client模式设置 在32位Windows系统上默认使用Client类型的JVM。要想使用Server模式则机器配置至少有2个以上的CPU和2G以上的物理内存。 client模式适用于对内存要求较小的桌面应用程序默认使用Serial串行垃圾收集器。 64位机器上只支持server模式的JVM适用于需要大内存的应用程序默认使用并行垃圾收集器。 关于server和client的官网介绍为https://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html 类型二-X参数选项
特点 非标准化参数功能还是比较稳定的。但官方说后续版本可能会变更以-X开头
各种选项 -Xmixed 混合模式执行 (默认) -Xint 仅解释模式执行 -Xcomp 仅采用即时编译器模式 -Xbootclasspath:用 ; 分隔的目录和 zip/jar 文件 设置搜索路径以引导类和资源 -Xbootclasspath/a:用 ; 分隔的目录和 zip/jar 文件 附加在引导类路径末尾 -Xbootclasspath/p:用 ; 分隔的目录和 zip/jar 文件 置于引导类路径之前 -Xdiag 显示附加诊断消息 -Xnoclassgc 禁用类垃圾收集 -Xincgc 启用增量垃圾收集 -Xloggc:file 将 GC 状态记录在文件中 (带时间戳) -Xbatch 禁用后台编译 -Xmssize 设置初始 Java 堆大小 -Xmxsize 设置最大 Java 堆大小 -Xsssize 设置 Java 线程堆栈大小 -Xprof 输出 cpu 配置文件数据 -Xfuture 启用最严格的检查, 预期将来的默认值 -Xrs 减少 Java/VM 对操作系统信号的使用 (请参阅文档) -Xcheck:jni 对 JNI 函数执行其他检查 -Xshare:off 不尝试使用共享类数据 -Xshare:auto 在可能的情况下使用共享类数据 (默认) -Xshare:on 要求使用共享类数据, 否则将失败。 -XshowSettings 显示所有设置并继续 -XshowSettings:all 显示所有设置并继续 -XshowSettings:vm 显示所有与 vm 相关的设置并继续 -XshowSettings:properties 显示所有属性设置并继续 -XshowSettings:locale 显示所有与区域设置相关的设置并继续 -X 选项是非标准选项, 如有更改, 恕不另行通知。 JVM的JIT编译模式相关的选项 -Xint 禁用JIT所有字节码都被解释执行这个模式的速度最慢的 -Xcomp 所有字节码第一次使用就都被编译成本地代码然后再执行 -Xmixed 混合模式默认模式让JIT根据程序运行的情况有选择地将某些代码编译成本地代码
特别地
-Xmx -Xms -Xss属于XX参数 -Xmssize 设置初始Java堆大小等价于-XX:InitialHeapSize -Xmxsize 设置最大Java堆大小等价于-XX:MaxHeapSize -Xsssize 设置Java线程堆栈大小-XX:ThreadStackSize 类型三-XX参数选项
特点 非标准化参数使用的最多的参数类型这类选项属于实验性不稳定以-XX开头
作用 用于开发和调试JVM
分类 1、Boolean类型格式 -XX:option表示启用option属性 -XX:-option表示禁用option属性 举例 -XX:-UseParallelGC 不选择垃圾收集器为并行收集器 -XX:UseG1GC 表示启用G1收集器 -XX:UseAdaptiveSizePolicy 自动选择年轻代区大小和相应的Survivor区比例 说明因为有的指令默认是开启的所以可以-使用关闭 2、非Boolean类型格式(key-value类型) 子类型1数值型格式-XX:optionnumber number表示数值number可以带上单位比如m 、M 表示兆 k 、K 表示Kb g 、 G 表示 g例如 32k跟32768是一样的效果 例如 -XX:NewSize1024m 表示设置新生代初始大小为1024兆 -XX:MaxGCPauseMillis500 表示设置GC停顿时间500毫秒 -XX:GCTimeRatio19 表示设置吞吐量 -XX:NewRatio2 表示新生代与老年代的比例 子类型2非数值型格式-XX:namestring 例如-XX:HeapDumpPath/usr/local/heapdump.hprof 用来指定heap转存文件的存储路径。
特别地 -XX:PrintFlagsFinal 输出所有参数的名称和默认值 默认不包括Diagnostic和Experimental的参数 可以配合-XX:UnlockDiagnosticVMOptions和-XX:UnlockExperimentalVMOptions使用 各种参数默认值参考
[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 : 12 {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 : 526385152 {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 1 {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 100 {manageable}uintx MaxHeapSize : 8417968128 {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 : 2805989376 {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 : 524288 {product}uintx MinHeapFreeRatio 0 {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 : 175112192 {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 : 351272960 {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 13 {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 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 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 : true {product}bool UseParallelOldGC true {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} 添加JVM参数选项
运行jar包 java -Xms50m -Xmx50m -XX:PrintGCDetails -XX:PrintGCTimeStamps -jar demo.jar 通过Tomcati运行war包
Linux系统下可以在tomcat/bin/catalina.sh中添加类似如下配置JAVA_OPTS-Xms512M -Xmx1024MWindows系统下在catalina.bat中添加类似如下配置set JAVA_OPTS-Xms512M -Xmx1024M
程序运行过程中
使用jinfo -flag namevalue pid 设置非Boolean类型参数使用jinfo -flag [|-]name pid 设置Boolean类型参数 常用的JVM参数选项
打印设置的XX选项及值
-XX:PrintCommandLineFlags 可以让在程序运行前打印出用户手动设置或者JVM自动设置的XX选项
-XX:PrintFlagsInitial 表示打印出所有XX选项的默认值
-XX:PrintFlagsFinal 表示打印出X选项在运行程序时生效的值
-XX:PrintVMOptions 打印JVM的参数 堆、栈、方法区等内存大小设置
栈
-Xss128k 设置每个线程的栈大小为128k等价于-XX:ThreadStackSize128k
堆内存
-Xms3550m 等价于-XX:nitialHeapSize设置JVM初始堆内存为3550M
-Xmx3550m 等价于-XX:MaxHeapSize设置JVM最大堆内存为3550M
-Xmn2g 设置年轻代大小为2G官方推荐配置为整个堆大小的3/8
-XX:NewSize1024m 设置年轻代初始值为1024M
-XX:MaxNewSize1024m 设置年轻代最大值为1024M
-XX:SurvivorRatio8 设置年轻代中Eden区与一个Survivor区的比值默认为8
-XX:UseAdaptiveSizePolicy 自动选择名区大小比例
-XX:NewRatio4 设置老年代与年轻代包括1个Eden和2个Survivor区的比值
-XX:PretenureSizeThreadshold1024 设置让大于此阈值的对象直接分配在老年代单位为字节只对Serial、ParNew收集器有效
-XX:MaxTenuringThreshold15 默认值为15新生代每次MinorGC后还存活的对象年龄1当对象的年龄大于设置的这个值时就进入老年代
-XX:PrintTenuringDistribution 让JVM在每次MinorGC后打印出当前使用的Survivort中对象的年龄分布
-XX:TargetSurvivorRatio 表示MinorGC结束后Survivor区域中占用空间的期望比例
方法区
永久代 -XX:PermSize256m 设置永久代初始值为256M -XX:MaxPermSize256m 设置永久代最大值为256M
元空间 -XX:MetaspaceSize 初始空间大小 -XX:MaxMetaspaceSize 最大空间默认没有限制 -XX:UseCompressedOops 压缩对象指针 -XX:UseCompressedClassPointers 压缩类指针 -XX:CompressedClassSpaceSize 设置Klass Metaspacef的大小默认1G
直接内存
-XX:MaxDirectMemorySize 指定DirectMemory容量若未指定则默认与Java堆最大值一样 OutofMemory相关的选项
-XX:HeapDumpOnOutOfMemoryError 表示在内存出现OOM的时候把Heap转存(Dump)到文件以便后续分析
-XX:HeapDumpBeforeFullGC 表示在出现FullGC之前生成Heap转储文件
-XX:HeapDumpPathpath 指定heap转存文件的存储路径
-XX:OnOutOfMemoryError 指定一个可行性程序或者脚本的路径当发生OOM的时候去执行这个脚本 对OnOutOfMemoryError的运维处理 以部署在linux系统/opt/Server目录下的Server.jar为例 1.在run.sh启动脚本中添加jvm参数 -XX:OnOutOfMemoryError/opt/Server/restart.sh 2.restart.sh脚本 linux环境 #!/bin/bash pid$(ps -ef|grep Server.jar|awk {if($8java) {print $2}}) kill -9 $pid cd /opt/Server/;sh run.sh Windows环境 echo off wmic process where Namejava.exe delete cd D:\Server start run.bat 垃圾收集器相关选项
7款经典收集器与垃圾分代之间的关系 垃圾收集器的组合关系 1. 两个收集器间有连线表明它们可以搭配使用 Serial/Serial Old、Serial/CMS、ParNew/Serial Old、ParNew/CMS、Parallel Scavenge/Serial Old、Parallel Scavenge/Parallel Old、G1
2. 其中Serial Old作为CMS出现Concurrent Mode Failure失败的后备预案。
3. (红色虚线)由于维护和兼容性测试的成本在JDK 8时将SerialCMS、ParNewSerial Old这两个组合声明为废弃JEP 173并在JDK 9中完全取消了这些组合的支持JEP214即移除。
4. (绿色虚线)JDK 14中弃用Parallel Scavenge和SerialOld GC组合 JEP 366
5. (青色虚线)JDK 14中删除CMS垃圾回收器 JEP 363
查看默认垃圾收集器
-XX:PrintCommandLineFlags查看命令行相关参数包含使用的垃圾收集器使用命令行指令jinfo –flag 相关垃圾回收器参数 进程ID
Serial回收器 Serial收集器作为HotSpot中Client模式下的默认新生代垃圾收集器。Serial Old是运行在Client模式下默认的老年代的垃圾回收器。 -XX:UseSerialGC 指定年轻代和老年代都使用串行收集器。等价于 新生代用Serial GC且老年代用Serial Old GC。可以获得最高的单线程收集效率。
ParNew回收器
-XX:UseParNewGC 手动指定使用ParNew收集器执行内存回收任务。它表示年轻代使用并行收集器不影响老年代。
-XX:ParallelGCThreadsN 限制线程数量默认开启和CPU数据相同的线程数。
Parallel回收器
-XX:UseParallelGC 手动指定年轻代使用Parallel并行收集器执行内存回收任务。-XX:UseParallelOldGC 手动指定老年代都是使用并行回收收集器。 分别适用于新生代和老年代。默认jdk8是开启的。上面两个参数默认开启一个另一个也会被开启。互相激活-XX:ParallelGCThreads 设置年轻代并行收集器的线程数。一般地最好与CPU数量相等以避免过多的线程数影响垃圾收集性能。 在默认情况下当CPU 数量小于8个 ParallelGCThreads 的值等于CPU 数量。当CPU数量大于8个ParallelGCThreads 的值等于3[5*CPU_Count]/8] 。-XX:MaxGCPauseMillis 设置垃圾收集器最大停顿时间(即STW的时间)。单位是毫秒。 为了尽可能地把停顿时间控制在MaxGCPauseMills以内收集器在工作时会调整Java堆大小或者其他一些参数。对于用户来讲停顿时间越短体验越好。但是在服务器端我们注重高并发整体的吞吐量。所以服务器端适合Parallel进行控制。该参数使用需谨慎。-XX:GCTimeRatio 垃圾收集时间占总时间的比例 1 / (N 1))。用于衡量吞吐量的大小。 取值范围0,100。默认值99也就是垃圾回收时间不超过1%。与前一个-XX:MaxGCPauseMillis参数有一定矛盾性。暂停时间越长Radio参数就容易超过设定的比例。-XX:UseAdaptiveSizePolicy 设置Parallel Scavenge收集器具有自适应调节策略 在这种模式下年轻代的大小、Eden和Survivor的比例、晋升老年代的对象年龄等参数会被自动调整已达到在堆大小、吞吐量和停顿时间之间的平衡点。在手动调优比较困难的场合可以直接使用这种自适应的方式仅指定虚拟机的最大堆、目标的吞吐量GCTimeRatio和停顿时间MaxGCPauseMills让虚拟机自己完成调优工作。
CMS回收器
-XX:UseConcMarkSweepGC 手动指定使用CMS 收集器执行内存回收任务。 开启该参数后会自动将-XX:UseParNewGC打开。即ParNew(Young区用)CMS(Old区用)Serial Old的组合。-XX:CMSlnitiatingOccupanyFraction 设置堆内存使用率的阈值一旦达到该阈值便开始进行回收。 JDK5及以前版本的默认值为68,即当老年代的空间使用率达到68%时会执行一次CMS 回收。JDK6及以上版本默认值为92% 如果内存增长缓慢则可以设置一个稍大的值大的阈值可以有效降低CMS的触发频率减少老年代回收的次数可以较为明显地改善应用程序性能。反之如果应用程序内存使用率增长很快则应该降低这个阈值以避免频繁触发老年代串行收集器。因此通过该选项便可以有效降低Full GC 的执行次数。-XX:UseCMSCompactAtFullCollection 用于指定在执行完Full GC后对内存空间进行压缩整理以此避免内存碎片的产生。不过由于内存压缩整理过程无法并发执行所带来的问题就是停顿时间变得更长了。-XX:CMSFullGCsBeforeCompaction 设置在执行多少次Full GC后对内存空间进行压缩整理。-XX:ParallelCMSThreads 设置CMS的线程数量。 CMS 默认启动的线程数是ParallelGCThreads3)/4ParallelGCThreads 是年轻代并行收集器的线程数。当CPU 资源比较紧张时受到CMS收集器线程的影响应用程序的性能在垃圾回收阶段可能会非常糟糕。
另外CMS收集器还有如下常用参数
-XX:ConcGCThreads设置并发垃圾收集的线程数默认该值是基于ParallelGCThreads计算出来的-XX:UseCMSInitiatingOccupancyOnly是否动态可调用这个参数可以使CMS一直按CMSInitiatingOccupancyFraction设定的值启动-XX:CMSScavengeBeforeRemark强制hotspot虚拟机在cms remark阶段之前做一次minor gc用于提高remark阶段的速度-XX:CMSClassUnloadingEnable如果有的话启用回收Perm 区JDK8之前-XX:CMSParallelInitialEnabled用于开启CMS initial-mark阶段采用多线程的方式进行标记用于提高标记速度在Java8开始已经默认开启-XX:CMSParallelRemarkEnabled用户开启CMS remark阶段采用多线程的方式进行重新标记默认开启-XX:ExplicitGCInvokesConcurrent 、-XX:ExplicitGCInvokesConcurrentAndUnloadsClasses这两个参数用户指定hotspot虚拟在执行System.gc()时使用CMS周期;-XX:CMSPrecleaningEnabled指定CMS是否需要进行Pre cleaning这个阶段
说明
JDK9新特性CMS被标记为Deprecate了(JEP291) 如果对JDK 9及以上版本的HotSpot虚拟机使用参数-XXUseConcMarkSweepGC来开启CMS收集器的话用户会收到一个警告信息提示CMS未来将会被废弃。JDK14新特性删除CMS垃圾回收器(JEP363) 移除了CMS垃圾收集器如果在JDK14中使用-XX:UseConcMarkSweepGC的话JVM不会报错只是给出一个warning信息但是不会exit。JVM会自动回退以默认GC方式启动JVM OpenJDK 64-Bit Server VM warning: Ignoring option UseConcMarkSweepGC; support was removed in 14.0 and the VM will continue execution using the default collector.
G1回收器
-XXUseG1GC 手动指定使用G1收集器执行内存回收任务。
-XX:G1HeapRegionSize 设置每个Region的大小。值是2的幂范围是1MB到32MB之间目标是根据最小的Java堆大小划分出约2048个区域。默认是堆内存的1/2000。
-XX:MaxGCPauseMillis 设置期望达到的最大GC停顿时间指标(JVM会尽力实现但不保证达到)。默认值是200ms
-XX:ParallelGCThread 设置STW时GC线程数的值。最多设置为8
-XX:ConcGCThreads 设置并发标记的线程数。将n设置为并行垃圾回收线程数(ParallelGCThreads)的1/4左右。
-XX:InitiatingHeapOccupancyPercent 设置触发并发GC周期的Java堆占用率阈值。超过此值就触发GC。默认值是45。
-XX:G1NewSizePercent、-XX:G1MaxNewSizePercent 新生代占用整个堆内存的最小百分比默认5%、最大百分比默认60%
-XX:G1ReservePercent10 保留内存区域防止 to spaceSurvivor中的to区溢出
Mixed GC调优参数 注意G1收集器主要涉及到Mixed GCMixed GC会回收young 区和部分old区。 G1关于Mixed GC调优常用参数
-XX:InitiatingHeapOccupancyPercent设置堆占用率的百分比0到100达到这个数值的时候触发global concurrent marking全局并发标记默认为45%。值为0表示间断进行全局并发标记。-XX:G1MixedGCLiveThresholdPercent设置Old区的region被回收时候的对象占比默认占用率为85%。只有Old区的region中存活的对象占用达到了这个百分比才会在Mixed GC中被回收。-XX:G1HeapWastePercent在global concurrent marking全局并发标记结束之后可以知道所有的区有多少空间要被回收在每次young GC之后和再次发生Mixed GC之前会检查垃圾占比是否达到此参数只有达到了下次才会发生Mixed GC。-XX:G1MixedGCCountTarget一次global concurrent marking全局并发标记之后最多执行Mixed GC的次数默认是8。-XX:G1OldCSetRegionThresholdPercent设置Mixed GC收集周期中要收集的Old region数的上限。默认值是Java堆的10%
怎么选择垃圾回收器
优先调整堆的大小让JVM自适应完成。如果内存小于100M使用串行收集器如果是单核、单机程序并且没有停顿时间的要求串行收集器如果是多CPU、需要高吞吐量、允许停顿时间超过1秒选择并行或者JVM自己选择如果是多CPU、追求低停顿时间需快速响应比如延迟不能超过1秒如互联网应用使用并发收集器。官方推荐G1性能高。现在互联网的项目基本都是使用G1。
特别说明 1. 没有最好的收集器更没有万能的收集 2. 调优永远是针对特定场景、特定需求不存在一劳永逸的收集器 GC日志相关选项
常用参数
-verbose:gc 输出gc日志信息默认输出到标准输出可以独立使用
-XX:PrintGC 等同于-verbose:gc表示打开简化的GC日志可以独立使用
-XX:PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志并在进程退出时输出当前内存各区域分配情况可以独立使用
-XX:PrintGCTimeStamps 输出GC发生时的时间戳不可以独立使用需要配合-XXPrintGCDetails使用
-XX:PrintGCDateStamps 输出GC发生时的时间戳以日期的形式如2013-05-04T21:53:59,2340800不可以独立使用需要配合-XXPrintGCDetails使用
-XX:PrintHeapAtGC 每一次GC前和GC后都打印堆信息可以独立使用
-Xloggc:file 把GC日志写入到一个文件中去而不是打印到标准输出中
其他参数
-XX:TraceClassLoading 监控类的加载
-XX:PrintGCApplicationStoppedTime 打印GC时线程的停顿时间
-XX:PrintGCApplicationConcurrentTime 垃圾收集之前打印出应用未中断的执行时间
-XX:PrintReferenceGC 记录回收了多少种不同引用类型的引用
-XX:PrintTenuringDistribution 让JVM在每次MinorGC后打印出当前使用的Survivor中对象的年龄分布
-XX:UseGCLogFileRotation 启用GC日志文件的自动转储
-XX:NumberOfGClogFiles1 GC日志文件的循环数目
-XX:GCLogFileSize1M 控制GC日志文件的大小 其他参数
-XX:DisableExplicitGC 禁止hotspot执行System.gc()默认禁用
-XX:ReservedCodeCacheSizen [g|m|k]、-XX:InitialCodeCacheSizen [g|m|k] 指定代码缓存的大小
-XX:UseCodeCacheFlushing 使用该参数让jvm放弃一些被编译的代码避免代码缓存被占满时VM切换到interpreted-only的情况
-XX:DoEscapeAnalysis 开启逃逸分析
-XX:UseBiasedLocking 开启偏向锁
-XX:UseLargePages 开启使用大页面
-XX:UseTLAB 使用TLAB,默认打开
-XX:PrintTLAB 打印TLAB的使用情况
-XX:TLABSize 设置TLAB大小 按功能性质区分JVM参数选项
Java HotSpot VM中-XX:的可配置参数列表进行描述
这些参数可以被松散的聚合成三类
行为参数Behavioral Options用于改变jvm的一些基础行为
性能调优Performance Tuning用于jvm的性能调优
调试参数Debugging Options一般用于打开跟踪、打印、输出等jvm参数用于显示jvm更加详细的信息
行为参数(功能开关) -XX:-DisableExplicitGC 禁止调用System.gc()但jvm的gc仍然有效 -XX:MaxFDLimit 最大化文件描述符的数量限制 -XX:ScavengeBeforeFullGC 新生代GC优先于Full GC执行 -XX:UseGCOverheadLimit 在抛出OOM之前限制jvm耗费在GC上的时间比例 -XX:-UseConcMarkSweepGC 对老生代采用并发标记交换算法进行GC -XX:-UseParallelGC 启用并行GC -XX:-UseParallelOldGC 对Full GC启用并行当-XX:-UseParallelGC启用时该项自动启用 -XX:-UseSerialGC 启用串行GC -XX:UseThreadPriorities 启用本地线程优先级
性能调优 -XX:LargePageSizeInBytes4m 设置用于Java堆的大页面尺寸 -XX:MaxHeapFreeRatio70 GC后java堆中空闲量占的最大比例 -XX:MaxNewSizesize 新生成对象能占用内存的最大值 -XX:MaxPermSize64m 老生代对象能占用内存的最大值 -XX:MinHeapFreeRatio40 GC后java堆中空闲量占的最小比例 -XX:NewRatio2 新生代内存容量与老生代内存容量的比例 -XX:NewSize2.125m 新生代对象生成时占用内存的默认值 -XX:ReservedCodeCacheSize32m 保留代码占用的内存容量 -XX:ThreadStackSize512 设置线程栈大小若为0则使用系统默认值 -XX:UseLargePages 使用大页面内存
调试参数 -XX:-CITime 打印消耗在JIT编译的时间 -XX:ErrorFile./hs_err_pidpid.log 保存错误日志或者数据到文件中 -XX:-ExtendedDTraceProbes 开启solaris特有的dtrace探针 -XX:HeapDumpPath./java_pidpid.hprof 指定导出堆信息时的路径或文件名 -XX:-HeapDumpOnOutOfMemoryError 当首次遭遇OOM时导出此时堆中相关信息 -XX:OnErrorcmd args;cmd args 出现致命ERROR之后运行自定义命令 -XX:OnOutOfMemoryErrorcmd args;cmd args 当首次遭遇OOM时执行自定义命令 -XX:-PrintClassHistogram 遇到Ctrl-Break后打印类实例的柱状信息与jmap -histo功能相同 -XX:-PrintConcurrentLocks 遇到Ctrl-Break后打印并发锁的相关信息与jstack -l功能相同 -XX:-PrintCommandLineFlags 打印在命令行中出现过的标记 -XX:-PrintCompilation 当一个方法被编译时打印相关信息 -XX:-PrintGC 每次GC时打印相关信息 -XX:-PrintGC Details 每次GC时打印详细信息 -XX:-PrintGCTimeStamps 打印每次GC的时间戳 -XX:-TraceClassLoading 跟踪类的加载信息 -XX:-TraceClassLoadingPreorder 跟踪被引用到的所有类的加载信息 -XX:-TraceClassResolution 跟踪常量池 -XX:-TraceClassUnloading 跟踪类的卸载信息 -XX:-TraceLoaderConstraints 跟踪类加载器约束的相关信息 通过Java代码获取JVM参数
Java提供了java.lang.management包用于监视和管理Java虚拟机和Java运行时中的其他组件它允许本地和远程监控和管理运行的Java虚拟机。其中ManagementFactory这个类还是挺常用的。另外还有Runtime类也可以获取一些内存、CPU核数等相关的数据。
通过这些api可以监控我们的应用服务器的堆内存使用情况设置一些阈值进行报警等处理。
/**** 监控我们的应用服务器的堆内存使用情况设置一些阈值进行报警等处理*/
public class MemoryMonitor {public static void main(String[] args) {MemoryMXBean memorymbean ManagementFactory.getMemoryMXBean();MemoryUsage usage memorymbean.getHeapMemoryUsage();System.out.println(INIT HEAP: usage.getInit() / 1024 / 1024 m);System.out.println(MAX HEAP: usage.getMax() / 1024 / 1024 m);System.out.println(USE HEAP: usage.getUsed() / 1024 / 1024 m);System.out.println(\nFull Information:);System.out.println(Heap Memory Usage: memorymbean.getHeapMemoryUsage());System.out.println(Non-Heap Memory Usage: memorymbean.getNonHeapMemoryUsage());System.out.println(通过java来获取相关系统状态 );System.out.println(当前堆内存大小totalMemory (int) Runtime.getRuntime().totalMemory() / 1024 / 1024 m);// 当前堆内存大小System.out.println(空闲堆内存大小freeMemory (int) Runtime.getRuntime().freeMemory() / 1024 / 1024 m);// 空闲堆内存大小System.out.println(最大可用总堆内存maxMemory Runtime.getRuntime().maxMemory() / 1024 / 1024 m);// 最大可用总堆内存大小}
}
输出如下 INIT HEAP: 100m MAX HEAP: 96m USE HEAP: 3m Full Information: Heap Memory Usage: init 104857600(102400K) used 3162256(3088K) committed 100663296(98304K) max 100663296(98304K) Non-Heap Memory Usage: init 2555904(2496K) used 5207432(5085K) committed 8060928(7872K) max -1(-1K) 通过java来获取相关系统状态 当前堆内存大小totalMemory 96m 空闲堆内存大小freeMemory 92m 最大可用总堆内存maxMemory 96m public class HeapSpaceInitial {public static void main(String[] args) {//返回Java虚拟机中的堆内存总量long initialMemory Runtime.getRuntime().totalMemory() / 1024 / 1024;//返回Java虚拟机试图使用的最大堆内存量long maxMemory Runtime.getRuntime().maxMemory() / 1024 / 1024;System.out.println(-Xms : initialMemory M);System.out.println(-Xmx : maxMemory M);System.out.println(系统内存大小为 maxMemory * 4.0 / 1024 G);System.out.println(系统内存大小为 initialMemory * 64.0 / 1024 G);}
}