美文网首页
JVM内存相关flag

JVM内存相关flag

作者: Foghost | 来源:发表于2020-02-14 18:05 被阅读0次

    -Xms -Xmx (or: -XX:InitialHeapSize -XX:MaxHeapSize)

    • -Xms 初始化堆大小 如-Xms5k、-Xms100m、-Xms4g,实际jvm运行中也可能会出现堆小于这个值的,jvm会在运行中动态调整堆大小

    • -Xmn 最大堆大小,用法同上

    实际使用中我们也会将-Xms-Xmn设置为同一大小来避免无谓的堆内存调整,称之为静态堆 -Xms -Xmx其实是-XX:InitialHeapSize -XX:MaxHeapSize的别称,用后边两个参数也可以达到同样的效果,用法也一样

    -Xmn or -XX:NewSize or -XX:NewRatio

    新生代大小,jdk默认新生代占堆的1/3,-Xmn等于-XX:NewSize -XX:MaxNewSize设置同样值的缩写,NewRatio指定的是所占比例,例-Xmn=1g-XX:NewSize=1g-XX:NewRatio=1

    -Xss

    java线程堆栈内存大小,默认1M,程序递归不多时可以将其设为256k,节约内存。

    -XX:SurvivorRatio

    新生代每个survivor区大小,默认值为8,即幸存区为新生代的1/10(SurvivorRatio+2),当幸存区内存太小时可能会造成某些临时对象直接晋升到老年代,需要具体程序具体分析

    -XX:MaxDirectMemorySize

    设置堆外内存最大值,默认最大堆外内存和堆内存大小差不多

    -XX:PermSize -XX:MaxPermSize(jdk7)

    -XX:MetaspaceSize -XX:MaxMetaspaceSize(jdk8)

    允许我们设置永久代初始大小及最大大小,例如:java -XX:PermSize=128m -XX:MaxPermSize=256m,永久代不属于堆

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath

    这两个参数可以在jvm发生OutOfMemory时自动进行堆转储,HeapDumpPath可以指定堆转储的位置,这两个参数在定位内存泄漏时非常有用,建议总是设置这两个参数,还应该注意对转储的位置需要预留足够的磁盘空间

    -XX:OnOutOfMemoryError

    这个参数允许我们在发生OutOfMemory时执行一些额外操作,比如执行一个shell命令-XX:OnOutOfMemoryError ="sh ~/cleanup.sh"

    -XX:InitialCodeCacheSize -XX:ReservedCodeCacheSize -XX:+UseCodeCacheFlushing

    code cache是存放jvm生成的native code的,JIT、jni都会编译native code,jvm运行时jit编译器自动生成的native code占据了主要部分,-XX:InitialCodeCacheSize设置初始化code cache大小,初始为2M,不开多层编译时最大值为48M,开了的话JDK7是96M,JDK8是240M,也可以手工设置大点,-XX:ReservedCodeCacheSize设置最大空间,如果code cache满了jvm将会打印一条警告日志并关闭jit编译器,这会导致程序运行性能变慢,+UseCodeCacheFlushing参数允许jvm在code cache满的时候释放一些native code空间,避免程序变慢,但是这个参数不是万能的,最好能找到code cache溢出的原因从根源上解决问题,其设置方法和Xms等参数类似

    参考资料:

    [Useful JVM Flags – Part 4 (Heap Tuning)

    关键业务系统的JVM参数推荐(2018仲夏版)

    Netty之Java堆外内存扫盲贴

    相关文章

      网友评论

          本文标题:JVM内存相关flag

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