jvm學習(2)——常用jvm參數

主要是三種參數

       Trace跟蹤參數

       堆的分配參數

       棧的分配參數

1.Trace跟蹤參數

-XX:+PrintGCDetails            打印GC詳細信息

-XX:+PrintGCDateStamps   輸出GC的時間戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)

-Xloggc:log/gc.log                將gc信息輸出到文件,:後表示文件路徑


2.堆的分配參數

-Xmx  最大化堆內存大小

–Xms  初始化對內存大小

程序在Runtime中含有三個信息分別是 

runtime.maxMemory() 即最大化堆內存大小

runtime.totalMemory() 當前運行分配的總內存大小,java會盡量維持在最小堆內存

runtime.freeMemory() 當前運行分配的總內存中有多少是沒被佔用的

堆內存 

由新生代和老年代組成,新生代中又分爲兩個Survivor區和eden

 

-Xmn                          設置新生代大小

-XX:NewRatio            新生代(eden+2*s)和老年代(不包含永久區)的比值 ,4 表示 新生代:老年代=1:4,即年輕代佔堆的1/5

-XX:SurvivorRatio      設置兩個Survivor區和eden的比 ,8表示 Survivor :eden=2:8,即一個Survivor佔年輕代的1/10

如下圖

 堆溢出問題

-XX:+HeapDumpOnOutOfMemoryError    OOM時導出堆到文件

-XX:+HeapDumpPath                                導出OOM的路徑

如:

-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump

或者在堆溢出時執行一個腳本

nXX:OnOutOfMemoryError

OOM時,執行一個腳本

-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p

 

堆內存總結:

根據實際事情調整新生代和倖存代的大小

方推薦新生代佔堆的3/8

倖存代佔新生代的1/10

OOM時,記得Dump出堆,確保可以排查現場問題

堆溢出錯誤:java.lang.OutOfMemoryError

*******有時候堆空間實際佔用非常少,但是永久區溢出 一樣拋出OOM


 

3.棧內存參數

-Xss 每個線程私有,對於線程運行不可缺少

常只有幾百K    越大能容納的線程數越少

定了函數調用的深度  越大能遞歸調用的次數越大

個線程都有獨立的棧空間

部變量、參數 分配在棧上

棧空間溢出錯誤:java.lang.StackOverflowError

 

常見堆棧錯誤見鏈接https://blog.csdn.net/sinat_29912455/article/details/51125748

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章