一、虛擬機參數
- -XX:+PrintGC 每次觸發GC的時候打印相關日誌
- -XX:+UseSerialGC 串行回收
- -XX:+PrintGCDetails 更詳細的GC日誌
- -Xms 堆初始值
- -Xmx 堆最大可用值
- -Xmn 新生代堆最大可用值
- -XX:NewRatio 新生代與老年代關係,最好是3或者4
- -Xss規定了每個線程堆棧的大小。一般情況下256K是足夠了。影響了此進程中併發線程數大小。
- -XX:SurvivorRatio 用來設置新生代中eden空間和from/to空間的比例. 含以
-XX:SurvivorRatio=eden/from=den/to
總結:在實際工作中,我們可以直接將初始的堆大小與最大堆大小相等,
這樣的好處是可以減少程序運行時垃圾回收次數,從而提高效率。
1.1 堆內存空間的知識
官方說明附鏈接: 垃圾回收機制
-
初始堆大小
計算機上物理內存的1/64的較大值或合理的最小值。在Java SE 5.0之前,默認的初始堆大小是一個合理的最小值,隨平臺的不同而不同。您可以使用-Xms命令行選項覆蓋此默認設置。 -
最大堆大小
小於物理內存的1/4或1GB。在Java SE 5.0之前,默認的最大堆大小爲64MB。您可以使用-Xmx命令行選項覆蓋此默認設置。
二、內存溢出
2.1 堆內存溢出
將jvm參數設置爲10M,循環創建1M對象十次,拋出內存溢出異常。
解決辦法很簡單,把內存加大即可,但也不是隨便加,要根據調優方法調。可參照JVM調優總結
2.2棧內存溢出
棧內存溢出的出現現象是:在方法中循環調用方法,會導致棧內存溢出。
最大深度是不確定的,不過可以通過設置JVM參數將深度提升。 -Xss?M 設置堆棧內存大小