JVM 学习笔记 — 控制参数

当一个 Java 程序被运行后,JVM虚拟机的一些参数都是默认配置的,没有参考实际情况,一旦当一些区域的内存超出了虚拟机限定大小后,就会导致内存溢出等一些不可预期的后果,这也是在企业级应用中不允许的存在。
所以当对 JVM 的内存区域有了一定理解后,就可以考虑对这些区域和垃圾回收进行调优。

英语水平好的可以直接看官方的文档

JDK 1.7及以前
https://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

JDK 1.8
https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

辅助参数

参数说明示例
-XX:+HeapDumpOnOutOfMemoryError堆内存异常时打印快照信息
-XX:+HeapDumpPath堆内存快照输出路径-XX:HeapDumpPath=C:/log/java/java_heapdump.log
-Xmn指定EDEN大小-Xmn256m
-XX:SurvirorRation指定幸存者(TO/From)区大小
-XX:pretenureSizeThreshold设置老年代大小

堆栈内存参数

参数说明示例
-Xms堆最小值-Xms80M
-Xmx堆最大值-Xmx80M
-Xss栈最大值-Xss1m
-XX:PermSize方法区内存最小值-XX:PermSize=20M
-XX:MaxPermSize方法区内存最大值-XX:MaxPermSize=21M

通常将 -Xmx和-Xms设置一样来减少 GC 次数,堆内存不足时会抛出OutOfMemoryError异常。
方法区OutOfMemoryError异常原因:常量过多、代理反射使用频繁。

本机内存参数

-XX:MaxDirectMemorySize=10M

内存不足时会抛出 OutOfMemory 异常。

垃圾回收

参数说明示例
-XX:+UseSerialGC允许使用串行(Serial)垃圾收集器
-XX:+UseParNewGC允许在年轻代中使用并行(ParNew)线程进行收集。默认禁用
-XX:+UseConcMarkSweepGC允许老年代使用CMS垃圾收集器,默认禁用
-XX:+UseParallelOldGC允许将并行垃圾收集器用于完整的GC,默认禁用
-verbose:gc 或 -XX:+PrintGC显示有关每个垃圾回收(GC)事件的信息
-XX:+PrintGCDetails获取更详细的 GC 事件信息
-XX:+PrintGCTimeStamps获取 GC 的频率和间隔
-XX:+PrintHeapAtGC获取堆的使用情况
-Xloggc:filename指定日志情况的保存路径-Xloggc:garbage-collection.log

并行:多条垃圾回收线程同时操作
并发:垃圾回收线程与用户线程一起操作

参考

https://www.cnblogs.com/AIPAOJIAO/p/9387802.html

发表留言

如未标注转载则文章均为本人原创,转载前先吱声,未授权转载我就锤爆你狗头。

人生在世,错别字在所难免,无需纠正。