JVM常见参数

一、JVM参数大致可以分为三类

1、标准指令:-开头,这些所有的HotSpot都支持的参数,可以用java -help打印出来.

  • -verbose:gc :输出每次GC的相关情况
  • -verbose:class:用于输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突时可此进行诊断
  • -verbose:jni:输出native方法调用的相关情况,一般用于诊断jni调用错误信息

2、非标准指令:-X开头,这些指令通常是跟特定的HotSpot版本对应的,可以用java -X打印出来
3、 不稳定参数:-XX开头,这一类参数是跟特定的HotSpot 版本对应,并且变化比较大,不推荐生产环境使用。
如果你想查看当前应用使用的JVM参数,你可以使用:ManagementFactory.getRuntimeMXBean().getInputArguments();

二、常用的参数介绍:

-Xms512m :设置JVM初始内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmx512m 或-XX:MaxHeapSize=512m:设置JVM最大可用内存为512M
-Xmn200m或-XX:NewSize=size + -XX:MaxNewSize=size :设置年轻代大小为200M。此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是(eden+1 survivor space)不同的。
-XX:InitialSurvivorRatio=ratio + -XX:+UseAdaptiveSizePolicy:幸存区比例(动态)
-XX:SurvivorRatio=ratio:幸存区比例
-XX:MaxTenuringThreshold=threshold:晋升阈值,新生代晋升到老年代的晋升阈值
-XX:+PrintTenuringDistribution :晋升详情
-XX:+ScavengeBeforeFullGC :FullGC前MinorGC
-XX:+UseSSerialGC:指定垃圾回收器
-XX:MaxMetaspaceSize=8m:设置元空间内存最大值。因为jdk1.8以后元空间使用本地内存,容易导致当前进程内存占用过多
-XX:MaxPermSize=8m :设置永久代内存最大值
-XX: +PrintStringTableStatistics :打印StringTable的字符串统计信息,比如个数等
-XX: +PrintGCDetails -verbose:gc :打印垃圾回收的详细信息
-XX:StringTableSize=200000 :设置StringTable的bucket,最少1009,默认jdk8是60013,jdk6是1009.如果系统中字符串较多,则考虑适当的将该值设置的大一些.here is the java 8 release notes nothing seem to be about String.intern . Here is little difference : The default value of -XX:StringTableSize parameter is 1009 in Java 6 and Java 7 until Java7u40. It was increased to 60013 in Java 7u40 (same value is used in Java 8 as well).
-XX:+DisableExplicitGC:禁用显示的垃圾回收,也就是代码中的System.gc();无效。System.gc(); 显示的垃圾回收,触发比较耗费性能的full GC。如果开启了该功能,会导致Java没有及时触发垃圾回收,从而ByteBuffer对象无法释放,而无法释放直接内存

当运行一个空方法,并设置堆内存20M,使用SerialGC垃圾回收器,并打印垃圾回收详细信息
JVM参数

还是上面的参数,将一个7M的数据放入List集合,结果如下:
垃圾回收minor分析

大对象晋升:当老年代控件足够,新生代空间不够的情况下,大对象会直接晋升,存入老年代,不触发垃圾回收。

当新生代与老年代空间均不够,会触发fullgc。
后面的参数与gc类似。
JVM老年代

子线程内存溢出不会导致主线程结束
子线程内存溢出不会导致主线程结束

欢迎大家留言,以便于后面的人更快解决问题!另外亦欢迎大家可以关注我的微信公众号,方便利用零碎时间互相交流。共勉!

posted @ 2023-08-05 16:18  东方欲晓_莫道君行早  阅读(15)  评论(0编辑  收藏  举报