JVM学习笔记二:JVM参数

所有线程共享的内存主要有两块:堆内存和方法区。

其中堆内存分为两块:新生代Young generation(Eden区、From Survivor区、To Survivor区)、老年代Tenured generation。

方法区有人也称之“永久代”,但是它们并不等同。方法区是JVM的规范,而永久代是该规范的一种实现方式。从jdk1.7开始已经逐步去除“永久代”,在JDK8中取而代之的是“元空间”(Metaspace)。

元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制

下面是JVM的一些主要参数:

1. 基本参数

参数 描述
-XX:+ 打开
-XX:- 关闭

2. 内存大小配置参数

参数 描述
-Xms 初始堆内存大小
-Xmx 最大堆内存大小
-Xmn 年轻代内存大小
-Xss 线程私有的虚拟机栈大小
-XX:MaxPermSize=64m 永久代最大值
-XX:PermSize 永久代初始值
-XX:MetaspaceSize 元空间初始大小
-XX:MaxMetaspaceSize 元空间最大值
-XX:MaxDirectMemorySize 直接内存大小,默认与Java堆最大值(-Xmx)一样

3. JVM调试参数

参数 描述
-verbose:gc 记录GC运行及运行时间
-XX:+PrintGCDetails 记录GC运行时的详细数据信息,以及在进程结束时打印当前的内存各区域分配情况。
-XX:+PrintGCTimeStamps 打印垃圾收集时间戳
-Xloggc:{gcLogPath} gc日志存放路径
-XX:+HeapDumpOnOutOfMemoryError 在内存溢出的时候生成Heap dump文件
-verbose:class、-XX:+TraceClassLoading 查看类加载信息(要求Product版虚拟机)
-XX:+TraceClassUnLoading 查看类卸载信息(要求FastDebug版虚拟机)
-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 用于远程调试

4. 垃圾收集器

参数 描述
-XX:+UseSerialG 使用Serial+Serial Old的收集器组合进行内存回收。
-XX:+UseParNewGC 使用ParNew+Serial Old的收集器组合进行内存回收。
-XX:+UseConcMarkSweepGC 使用ParNew+CMS+Serial Old的收集器组合进行内存回收。Serial Old作为出现Concurrent Mode Failure失败后的后备收集器使用。
-XX:+UseParallelGC 使用Parallel Scavenge+Serial Old(PS Mark Sweep)收集器组合进行内存回收。
-XX:+UseParallelOldGC 使用Parallel Scavenge+Parallel Old收集器组合进行内存回收。

5. JVM调优参数

参数 描述
-XX:SurvivorRatio 新生代中Eden区域和Survivor区域(单个Survivor)的容量比值,默认为8
-XX:NewRatio 堆内存中老生代和年轻代的容量比值。例:NewRatio=2,表明old:new=2:1
-XX:PretenureSizeThreshold 直接晋升到老年代的对象大小,大于该值的对象直接在老年代分配。
-XX:MaxTenuringThreshold 对象在新生代中能存活的最大年龄。
-XX:+UseAdaptiveSizePolicy 动态调整Java堆中各个区域的大小以及进入老年代的年龄(限Parallel Scaverge收集器)
-XX:+HandlePromotionFailure 允许老年代分配担保失败,开启后可以冒险YGC。
-XX:ParallelGCThreads 设置并行GC时进行内存回收的线程数
-XX:GCTimeRatio 默认为99,即允许1%的GC时间。GC时间占总时间的比例由公式1/(1+GCTimeRatio)得出(限Parallel Scaverge收集器)
-XX:MaxGCPauseMillis 设置GC的最大停顿时间(限Parallel Scaverge收集器)
-XX:+CMSInitialingOccupancyFraction 设置CMS收集器在老年代空间被使用多少后触发Full GC。默认值是68,即68%。(限CMS收集器)
-XX:+UseCMSCompactionAtFullCollection 设置CMS在完成垃圾收集后进行一次内存碎片整理。(限CMS收集器)
-XX:+CMSFullGCsBeforeCompaction 设置CMS执行多少次GC后,下次GC时进行一次内存碎片整理,默认为0。即每次都整理。
-Xnoclassgc 不回收无用类
原文地址:https://www.cnblogs.com/znicy/p/6882424.html