文章目錄
- 1. 設置堆空間大小
- 2. 虛擬機棧的設置
- 3. 年輕代中Eden區和兩個Survivor區的大小比例
- 4. 年輕代晉升老年代閾值
- 5. 設置垃圾回收收集器
1. 設置堆空間大小
設置堆的初始大小和最大大小,為了防止垃圾收集器在初始大小、最大大小之間收縮堆而產生額外的時間,通常把最大、初始大小設置為相同的值
。
堆空間設置多少合適?
最大大小的默認值是物理內存的1/4,初始大小是物理內存的1/64
堆太小,可能會頻繁的導致年輕代和老年代的垃圾回收,會產生stw,暫停用戶線程
堆內存大肯定是好的,存在風險,假如發生了fullgc,它會掃描整個堆空間,暫停用戶線程的時間長
設置參考推薦:盡量大,也要考察一下當前計算機其他程序的內存使用情況
2. 虛擬機棧的設置
虛擬機棧的設置:每個線程默認會開啟1M的內存
,用于存放棧幀、調用參數、局部變量等,但一般256K就夠用
。通常減少每個線程的堆棧,可以產生更多的線程,但這實際上還受限于操作系統。
3. 年輕代中Eden區和兩個Survivor區的大小比例
設置年輕代中Eden區和兩個Survivor區的大小比例。該值如果不設置,則默認比例為8:1:1
。通過增大Eden區的大小,來減少YGC發生的次數
,但有時我們發現,雖然次數減少了,但Eden區滿的時候,由于占用的空間較大,導致釋放緩慢,此時STW的時間較長,因此需要按照程序情況去調優。