jvm 参数小结
0.參數(shù)默認(rèn)值
java -XX:+PrintFlagsFinal可以使用 此命令查看參數(shù)默認(rèn)值。示例圖見圖0-1.
圖0-1 看到NewRatio默認(rèn)值為2
1.內(nèi)存相關(guān)
-Xmx ? //Java Heap最大值,默認(rèn)值為物理內(nèi)存的1/4,最佳設(shè)值應(yīng)該視物理內(nèi)存大小及計(jì)算機(jī)內(nèi)其他內(nèi)存開銷而定;
-Xms ??//Java Heap初始值,Server端JVM最好將-Xms和-Xmx設(shè)為相同值,開發(fā)測試機(jī)JVM可以保留默認(rèn)值;
-Xmn? ?//Java Heap 新生代大小,不熟悉最好保留默認(rèn)值;
-Xss? ?//每個(gè)線程的Stack大小,不熟悉最好保留默認(rèn)值;
-XX:MaxDirectMemorySize=128m ?//設(shè)置最大堆外內(nèi)存
-XX:SurvivorRatio=8
新生代中Eden大小 / survivor大小 的值,默認(rèn)值為8。
-XX:NewRatio=2
老年代大小 / 新生代大小 的值,英文名字感覺像是取反了。默認(rèn)值為2。即新生代占堆內(nèi)存的1/3。
-XX:PermSize=128M?
設(shè)置永久代(方法區(qū))的大小。
1.1 默認(rèn)值
-server時(shí)最大堆內(nèi)存是物理內(nèi)存的1/4,但不超過1G。VM 文檔可參考:http://docs.oracle.com/javase/7/docs/technotes/guides/vm/
1.2 堆外內(nèi)存
tomcat 7中使用了NIO,而這會(huì)占用一部分堆外內(nèi)存。可通過-XX:MaxDirectMemorySize=50m進(jìn)行限制。 親測有效果,堆外內(nèi)存減少了200M,但堆內(nèi)存+永久代+最大堆外內(nèi)存還是小于進(jìn)程的實(shí)際占用內(nèi)存,小了147M。不得其解。1.3 java8
java 8中PermSpace變?yōu)榱薓etaspace。如最大元空間尺寸就變?yōu)?-XX:MaxMetaspaceSize=xxm?2. GC策略
2.1 新生代
-XX:+UseParNewGC//指定新生代的收集器為ParNew2.2 老年代
-XX:+UseConcMarkSweepGC ? ? ?//指定老年代的垃圾收集器為CMS-XX:CMSInitiatingOccupancyFraction=85 ? ??//老年代占用比例達(dá)到85%時(shí)開始回收
2.3 年齡相關(guān)
-XX:MaxTenuringThreshold=15指定對(duì)象到達(dá)15歲時(shí)被移到Old區(qū)。默認(rèn)值為15。
需要注意的是,并不是年齡非得到達(dá)指定值后才會(huì)被移到老年代,JVM還有自己的一套規(guī)則,煩人。
3.GC日志
-Xloggc:../gclogdir/logc.txt ? ? ? ??//指定gc日志的打印位置,注意必須指定到文件,不能為目錄。-XX:+PrintGCDateStamps? -XX:+PrintGCDetails? -XX:+PrintHeapAtGC? -XX:+PrintTenuringDistribution
這個(gè)參數(shù)用于顯示每次Minor GC時(shí)Survivor區(qū)中各個(gè)年齡段的對(duì)象的大小。
4.visual VM遠(yuǎn)程監(jiān)控
使用JMX協(xié)議進(jìn)行遠(yuǎn)程監(jiān)控。 比如在A機(jī)器(windows)上查看B機(jī)器(linux)上j進(jìn)程c(java進(jìn)程)的情況。需要在c啟動(dòng)時(shí)加入?yún)?shù):-Djava.rmi.server.hostname=B機(jī)器ip -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=port -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
5. 常見搭配
java -server -Xms2g -Xmx2g -Xmn512m -XX:CMSInitiatingOccupancyFraction=85 -XX:SurvivorRatio=8 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -Dcom.sun.management.jmxremote.port=2175 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../dumpdir/ -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Xloggc:../gclogdir/6.IDE中調(diào)試指定參數(shù)
Eclipse中修改待運(yùn)行程序的參數(shù)。package視圖|app.java|右鍵|Run As|Run Configurations,在Arguments 參數(shù)中的“VM arguments: ”中填入如下值即可,見圖6-1。
-Xms256m -Xmx256m
圖6-1 eclipse中指定vm參數(shù)
eclipse中運(yùn)行代碼,實(shí)質(zhì)就是它新開了一個(gè)線程運(yùn)行你的代碼。
通過代碼檢驗(yàn)
總結(jié)
- 上一篇: Lucene6.0 创建索引及查询te
- 下一篇: 该不该详细打日志