美文网首页
JVM常见参数

JVM常见参数

作者: 东方欲晓_莫道君行早 | 来源:发表于2023-08-04 16:48 被阅读0次

    一、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参数.png

    还是上面的参数,将一个7M的数据放入List集合,结果如下:


    垃圾回收minor-分析.png

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

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


    jvm-老年代.png

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


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

    相关文章

      网友评论

          本文标题:JVM常见参数

          本文链接:https://www.haomeiwen.com/subject/oliypdtx.html