目录
虚拟机学习系列 - 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 | 默认关闭 | 打印即时编译后的二进制信息 |