-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等参数类似
参考资料:
网友评论