Java8的元空间:
Java8中,永久区(java7)被移除,被一个称为元空间的区域所取代,元空间本质和永久区类似,都是对JVM规范中方法区的实现,他们之间的最大区别在于:永久区使用的是JVM的堆内存,而元空间并不在虚拟机中,他使用的是本机物理内存。
因此默认情况下,元空间大小仅受本地内存限制。
常用参数:
-Xms
:初始内存大小,默认物理内存1/64,等价于-XX:InitialHeapSize
-Xmx
:最大分配内存,默认物理内存1/4,等价于-XX:MaxHeapSize
-Xss
:设置单个线程栈的大小,等价于-XX:ThreadStackSize
E:\ideaProjects\mq>jinfo -flag ThreadStackSize 12360 #查看运行程序的栈大小
-XX:ThreadStackSize=0 #0表示使用默认值
-Xmn
:设置年轻代大小,
-XX:MetaspaceSize
:设置元空间大小
例如:
java -Xms128m -Xmx4096m -Xss1024 -XX:Metaspacesize=512m -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseSerialGC HelloGC
-XX:+PrintGCDetails
打印GC收集细节
如何查看:
-XX:SurvivorRatio
:设置新生代中eden和s0/s1空间的比例,例如:-XX:SurvivorRatio=4 表示4:1:1,默认8:1:1
-XX:NewRatio
:设置老年代的占比,剩下的1给新生代。例如:-XX:NewRatio=4,表示新生代:老年代=1:4,年轻代占整个堆的1/5
-XX:MaxTenuringThreshold
设置年龄最大年龄,要在0-15之间