1. 程式人生 > >JVM參數調優(一)

JVM參數調優(一)

棧內存 jdk1.5 時間比較 print 結束 出了 over 老年代 提高效率

過了段時間沒寫日誌了,今天有空寫下,下面寫的是jvm相關的概念及調優,開發的朋友平時可以讀讀其他的書,比如散文方面,為人處世方面的。

1、-XX:+PrintGC 每次觸發GC的時候打印相關日誌
-XX:+UseSerialGC 串行回收
-XX:+PrintGCDetails 更詳細的GC日誌
-Xms 堆初始值
-Xmx 堆最大可用值
-Xmn 新生代堆最大可用值
-XX:SurvivorRatio 用來設置新生代中eden空間和from/to空間的比例.
-XX:NewRatio 配置新生代與老年代占比 1:2

含以-XX:SurvivorRatio=eden/from=den/to
總結:在實際工作中,我們可以直接將初始的堆大小與最大堆大小相等,
這樣的好處是可以減少程序運行時垃圾回收次數,從而提高效率。
-XX:SurvivorRatio 用來設置新生代中eden空間和from/to空間的比例.

2、虛擬機棧溢出
錯誤原因: java.lang.StackOverflowError 棧內存溢出
棧溢出?產生於遞歸調用,循環遍歷是不會的,但是循環方法裏面產生遞歸調用,?也會發生棧溢出。
解決辦法:設置線程最大調用深度
-Xss5m 設置最大調用深度

3、內存溢出與內存泄漏區別
Java內存泄漏就是沒有及時清理內存垃圾,導致系統無法再給你提供內存資源(內存資源耗盡);

而Java內存溢出就是你要求分配的內存超出了系統能給你的,系統不能滿足需求,於是產生溢出。
內存溢出,這個好理解,說明存儲空間不夠大。就像倒水倒多了,從杯子上面溢出了來了一樣。
內存泄漏,原理是,使用過的內存空間沒有被及時釋放,長時間占用內存,最終導致內存空間不足,而出現內存溢出。

4、串行與並行收集器
串行回收: JDK1.5前的默認算法 缺點是只有一個線程,執行垃圾回收時程序停止的時間比較長
並行回收: 多個線程執行垃圾回收適合於吞吐量的系統,回收時系統會停止運行

5、serial收集器
串行收集器是最古老,最穩定以及效率高的收集器,可能會產生較長的停頓,只使用一個線程去回收。新生代、老年代使用串行回收;新生代復制算法、老年代標記-壓縮;垃圾收集的過程中會Stop The World(服務暫停)

6、一個單線程的收集器,在進行垃圾收集時候,必須暫停其他所有的工作線程直到它收集結束。
特點:CPU利用率最高,停頓時間即用戶等待時間比較長。
適用場景:小型應用
通過JVM參數-XX:+UseSerialGC可以使用串行垃圾回收器。

JVM參數調優(一)