目录
虚拟机学习系列 - 1 - 运行时数据区域
虚拟机学习系列 - 2 - 垃圾收集概述
虚拟机学习系列 - 3 - 垃圾收集算法
虚拟机学习系列 - 4 - 垃圾收集器
虚拟机学习系列 - 5 - 内存分配与回收策略
表格主要来源于《深入理解Java虚拟机》,黑色字体
之后遇到的也会总结在这里在这里记录只是为了查阅方便
其中“----”表示:我不知道。。。
| A | 内存管理参数 | |
| DisableExplicitGC | 默认关闭 | 忽略来自System.gc()方法触发的垃圾收集 |
| ExplicitGCInvokesConcurrent | 默认关闭 | 当收到System.gc()方法提交的来机收集申请时,使用CMS收集器进行收集 |
| UseSerialGC | Client模式的虚拟机默认开启,其他模式关闭 | 虚拟机运行在Client模式下的默认值,打开此开关后,使用Serial + Serial Old的收集器组合进行内存回收 |
| UseParNewGC | 默认关闭 | 打开此开关后,使用ParNew + Serial Old的收集器组合进行内存回收 |
| UseConcMarkSweepGC | 默认关闭 | 打开此开关后,使用ParNew + CMS + Serial Old的收集器组合进行内存回收.如果CMS收集器出现Concurrent Mode Failure,则Serial Old收集器将作为后备收集器 |
| UseParallelGC | Server模式的虚拟机默认开启,其他模式关闭 | 虚拟机运行在Server模式下的默认值,打开此开关后,使用Parallel Scavenge + Serial Old的收集器组合进行内存回收 |
| UseParallelOldGC | 默认关闭 | 打开此开关后,使用Parallel Scavenge + Parallel Old的收集器组合进行内存回收 |
| SurvivorRatio | 默认为8 | 新生代中Eden区域与Survivor区域的容量比 |
| PretenureSizeThreshold | 无默认值 | 直接晋升到老年代的对象大小,设置这个参数后,大于这个参数的对象将直接在老年代分配 |
| MaxTenuringThreshold | 默认值为15 | 晋升到老年代的对象年龄,每个对象在坚持过一次Minor GC之后,年龄就+1,当超过这个参数值时就进入老年代 |
| UseAdaptiveSizePolicy | 默认开启 | 动态调整java堆中各个区域的大小及进入老年代的年龄 |
| HandlePromotionFailure | jdk1.5及以前是默认关闭,jdk1.6默认开启 | 是否允许分配担保失败,即老年代的剩余空间不足以应付新生代的整个Eden和Survivor区的所有对象都存活的极端情况 |
| ParallelGCThreads | 少于或等于8个CPU时默认值为CPU数量值,多于8个CPU时比CPU数量值小 | 设置并行GC时进行内存回收的线程数 |
| GCTimeRatio | 默认值99 | GC时间占总时间的比率.仅在使用Parallel Scavenge收集器时生效 |
| MaxGCPauseMills | 无默认值 | 设置GC最大停顿时间.仅在使用Parallel Scavenge收集器时生效 |
| CMSInitiatingOccupancyFraction | 默认值68 | 设置CMS收集器在老年代空间被使用多少后触发垃圾收集 |
| UseCMSCompactAtFullCollection | 默认开启 | 设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片整理 |
| CMSFullGCsBeforeCompaction | 无默认值 | 设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片整理 |
| ScavengeBeforeFullGC | 默认开启 | 在Full GC发生之前触发一次Minor GC |
| UseGCOverheadLimit | 默认开启 | 禁止GC过程无限制的执行,如果过于频繁,就直接发生OutOfMemory |
| UseTLAB | Server模式默认开启 | 优先在本地线程缓冲区中分配对象,避免分配内存时的锁定过程 |
| MaxHeapFreeRatio | 默认值70 | 当Xmx值比Xms值大时,堆可以动态收缩和扩展,这个参数控制当堆空闲大于指定比率时自动收缩 |
| MinHeapFreeRatio | 默认值40 | 当Xmx值比Xms值大时,堆可以动态收缩和扩展,这个参数控制当堆空闲小于指定比率时自动收缩 |
| MaxPermSize | 大部分情况下默认值是64MB | 永久代的最大值 |
| B | 即时编译参数 | |
| CompileThreshold | Client模式下默认值1500,Server模式下默认值10000 | 触发即时编译的阈值 |
| OnStackReplacePercentage | Client模式下默认值933,Server模式下140 | OSR比率,它是OSR即时编译阈值计算公司的一个参数,用于代替BackEdgeThreshold参数控制回边计数器的实际溢出阈值 |
| ReservedCodeCacheSize | 大部分情况下默认值32MB | 即时编译器编译的代码缓存使得最大值 |
| C | 类型加载参数 | |
| UseSplitVerifier | 默认开启 | 使用依赖StackMapTable信息的类型检查代替数据流分析,以加快字节码校验速度 |
| FailOverToOldVerifier | 默认开启 | 当类型校验失败时,是否允许回到老的类型推到校验方式进行校验,如果开启则允许 |
| RelaxAccessControlCheck | 默认开启 | 在校验阶段放松对类型访问性的限制 |
| D | 多线程相关参数 | |
| UseSpinning | jdk1.6默认开启,jdk1.5默认关闭 | 开启自旋锁以免线程频繁的挂起和唤醒 |
| PreBolckSpin | 默认值10 | 使用自旋锁时默认的自旋次数 |
| UseThreadPriorities | 默认开启 | 使用本地线程优先级 |
| UseBiasedLocking | 默认开启 | 是否使用偏向锁,如果开启则使用 |
| UseFastAccessorMethods | 默认开启 | 当频繁反射执行某个方法时,生成字节码来加快反射的执行速度 |
| E | 性能参数 | |
| AggressiveOpts | jdk1.6默认开启,jdk1.5默认关闭 | 使用激进的优化特征,这些特征一般是具备正面和负面双重影响的,需要根据具体应用特点分析才能判定是否对性能有好处 |
| UseLargePage | 默认开启 | 如果可能,使用大内存分页,这项特性需要操作系统的支持 |
| LargePageSizeInBytes | 默认值4MB | 使用指定大小的内存分页,这项特性需要操作系统的支持 |
| StringCache | 默认开启 | 是否使用字符串缓存,开启则使用 |
| F | 调试参数 | |
| HeapDumpOnOutOfMemoryError | 默认关闭 | 在发生内存溢出异常时是否生成堆转储快照,关闭则不生成 |
| OnOutOfMemoryError | 无默认值 | 当虚拟机抛出内存溢出异常时,执行指令的命令 |
| OnError | 无默认值 | 当虚拟机抛出ERROR异常时,执行指令的命令 |
| PrintClassHistogram | 默认关闭 | 使用[ctrl]-[break]快捷键输出类统计状态,相当于jmap-histo的功能 |
| PrintConcurrentLocks | 默认关闭 | 打印J.U.C中的状态 |
| PrintCommandLineFlags | 默认关闭 | 打印启动虚拟机时输入的非稳定参数 |
| PrintFlagsFinal | ---- | 显示所有可设置的参数及它们的值(***从JDK 6 update 21开始才可以用) |
| PrintFlagsInitial | ---- | 显示在处理参数之前所有可设置的参数及它们的值,然后直接退出程序 |
| PrintCompilation | 默认关闭 | 打印方法即时编译信息 |
| PrintGC | 默认关闭 | 打印GC信息 |
| PrintGCDetails | 默认关闭 | 打印GC的详细信息 |
| PrintGCTimeStamps | 默认关闭 | 打印GC停顿耗时 |
| PrintTenuringDistribution | 默认关闭 | 打印GC后新生代各个年龄对象的大小 |
| TraceClassLoading | 默认关闭 | 打印类加载信息 |
| TraceClassUnloading | 默认关闭 | 打印类卸载信息 |
| PrintInlining' | 默认关闭 | 打印方法内联信息 |
| PrintCFGToFile | 默认关闭 | 将CFG图信息输出到文件,只有DEBUG版虚拟机才支持此参数 |
| PrintIdealGraphFile | 默认关闭 | 将Ideal图信息输出到文件,只有DEBUG版虚拟机才支持此参数 |
| UnlockDiagnosticVMOptions | 默认关闭 | 让虚拟机进入诊断模式,一些参数(如PrintAssembly)需要在诊断模式中才能使用 |
| PrintAssembly | 默认关闭 | 打印即时编译后的二进制信息 |
本文深入探讨了Java虚拟机中的内存管理参数配置,包括内存分配与回收策略、即时编译参数等关键概念,并详细解析了各参数的作用与应用场景,帮助开发者优化JVM性能。
2万+

被折叠的 条评论
为什么被折叠?



