JVM 配置参数
其他配置参数
栈帧中的局部变量表中的槽位是可以重用的,超过作用域,并且被重用是可以被gc顺利回收的
-Xss:栈空间的大小,栈越大,调用的方法就越多,越深
-XX:+PrintGC:可以看到垃圾回收前后堆的大小
-XX:+DoEscapeAnalysis:启用逃逸分析(局部对象不逃逸,成员对象会逃逸)
-XX:+EliminateAllocations:开启了标量替换(默认打开)
-XX:-UseTLAB:关闭了TLAB
-XX:PermSize和-XX:MaxPermSize指定方法区大小(永久代),类的信息(字段、方法、字节码等)保存在方法区(jdk1.7)
-XX:MaxMetaspaceSize:元数据区可以使系统支持更多的类(这是堆的直接内存,理论可以耗尽系统内存)Metaspace
虚拟机日志
-XX:+PrintGC:打印Gc回收信息
-XX:+PrintGCDetails:打印GC回收详细信息
-XX:+PrintGCTimeStamps:分析GC发生的时间
-XX:+PrintGCApplicationConcurrentTime:打印应用程序的执行时间
-XX:+PrintGCApplicationStoppedTime:打印应用程序由于GC而产生的停顿时间
-Xloggc:log/gc.log:虚拟机允许将GC日志以文件的形式输出
-Xlog:gc:建议jdk9,10之后是使用
-Xlog:gc*:建议jdk9,10之后是使用
类加载/卸载的跟踪
-verbose:class:跟踪类的加载/卸载
-XX:+TraceClassLoading:跟踪类的加载
-Xlog:class+load=info:(JDK9、JDK10中建议使用)
-XX:+TraceClassUnloading:跟踪类的卸载
-Xlog:class+unload=info:JDK9、JDK10中建议使用
-XX:+PrintClassHistogram:在Java的控制台中按下Ctrl+Break组合键,控制台上就会显示当前的类信息柱状图
-XX:+PrintVMOptions:程序运行时打印虚拟机接收到的命令行显式参数
堆内存的配置
尽可能将对象预留在新生代,减少老年代GC的次数
Full GC,它同时回收了新生代、老年代和永久区
新生代(new generation)=(eden+from+to)
老年代(tenured generation)
永久区(compacting perm gen)
-XX:MaxHeapSize:最大堆内存
-Xms:初始堆
-Xmx:最大堆
-Xmn:设置新生代的大小(较大的新生代会减小老年代的大小,新生代的大小一般设置为整个堆空间的1/3到1/4)
-XX:SurvivorRatio=2:(2:1)设置新生代中eden区和from/to区的比例
-XX:NewRatio:来设置新生代和老年代的比例
-XX:+HeapDumpOnOutOfMemoryError:可以在内存溢出时导出整个堆的信息(使用MAT等工具)
-XX:HeapDumpPath=d:/a.dump:指定导出堆的存放路径
![image](https://img-blog.csdnimg.cn/img_convert/c15e3e44acacb90c42acca0623d5e80c.png)
非堆内存的参数配置
在JDK 1.6和JDK 1.7等版本中
-XX:PermSize:初始的永久区大小
-XX:MaxPermSize:最大永久区大小
从JDK 1.8开始
-XX:MaxMetaspaceSize:指定永久区的最大可用值,默认情况:元数据区只受系统可用内存的限制
-Xss:指定线程的栈大小
-XX:MaxDirectMemorySize:默认值为最大堆空间(-Xmx),满了则触发垃圾回收,收不了则OOM,Java有安全类Unsafe直接操作内存
直接内存适合申请次数较少、访问较频繁的场合。如果需要频繁申请内存空间,则并不适合使用直接内存
-clien:指定使用Client模式
-server:使用Server模式
-XX:+PrintFlagsFinal:查看给定参数的默认值