調(diào)整堆內(nèi)存參數(shù)
以前的分析表明,實(shí)際上每個(gè)子內(nèi)存區(qū)都有一部分可變區(qū)。基本過程如下:
如果空間不足,則在可變范圍內(nèi)擴(kuò)展內(nèi)存空間,如果在一段時(shí)間后發(fā)現(xiàn)內(nèi)存空間沒有這么緊張,則釋放可變空間。
所以在整個(gè)調(diào)整過程之中:
-Xms:設(shè)置初始分配大小,默認(rèn)為物理內(nèi)存的“1/64”
-Xmx:最大分配內(nèi)存,默認(rèn)為物理內(nèi)存的“1/4”
在整個(gè)堆內(nèi)存的調(diào)整策略之中,有經(jīng)驗(yàn)的人基本只會(huì)調(diào)整兩個(gè)參數(shù):“-Xmx”(最大內(nèi)存)、“-Xms”(初始化內(nèi)存)。如果要取得這些內(nèi)存的整體信息,直接利用Runtime類即可;
Sy(“Max_memory=”+Run().maxMemory()/(double)1024/1024+”M”);
Sy(“Total_memory=”+Run().totalMemory()/(double)1024/1024+”M”);
Max_memory=1820.5M (默認(rèn)最大內(nèi)存)
Total_memory=123.0M (初始化內(nèi)存)
發(fā)現(xiàn)默認(rèn)的情況下分配的內(nèi)存是總內(nèi)存的1/4;;而初始化內(nèi)存為“1/64”;那么也就是說整個(gè)內(nèi)存的可變范圍(伸縮區(qū)):123.0M ~ 1820.5M 之間,那么現(xiàn)在就可能造成程序性能下降;所以,我最好能讓伸縮區(qū)的大小為0;即讓 Max_memory 和 Total_memory 保持一致;
(java -Xms2G -Xmx2G TestDemo)
Max_memory=1963.0M
Total_memory=1963.0M
那么這個(gè)時(shí)候就避免了伸縮區(qū)的可調(diào)策略,從而提升了整個(gè)程序的性能;
范例:觀察GC的詳解日志(java -Xms2G -Xmx2G -XX:+PrintGCDetails TestDemo)
Max_memory=1963.0M
Total_memory=1963.0M
[GC ()) [PSYoungGen: 31488K->608K(611840K)] 31488K->616K(2010112K), 0.0149295 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[Full GC ()) [PSYoungGen: 608K->0K(611840K)] [ParOldGen: 8K->490K(1398272K)] 616K->490K(2010112K), [Metaspace: 2791K->2791K(1056768K)], 0.0061879 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
Heap
PSYoungGen total 611840K, used 5248K [0x0000000795580000, 0x00000007c0000000, 0x00000007c0000000)
eden space 524800K, 1% used [0x0000000795580000,0x0000000795aa0178,0x00000007b5600000)
from space 87040K, 0% used [0x00000007b5600000,0x00000007b5600000,0x00000007bab00000)
to space 87040K, 0% used [0x00000007bab00000,0x00000007bab00000,0x00000007c0000000)
ParOldGen total 1398272K, used 490K [0x0000000740000000, 0x0000000795580000, 0x0000000795580000)
object space 1398272K, 0% used [0x0000000740000000,0x000000074007ab88,0x0000000795580000)
Metaspace used 2798K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 304K, capacity 386K, committed 512K, reserved 1048576K
下面再編寫一個(gè)代碼,觀察GC的觸發(fā)操作:
范例:測(cè)試GC處理(請(qǐng)保存內(nèi)存空間?。?-Xms10M -Xmx10M -XX:+PrintGCDetails)
Random random = new Random();
string string = “213123”;
while (true)
{
string += string + random.nextInt(8888888)+random.nextInt(8888888);
(); //強(qiáng)制產(chǎn)生垃圾
}
}
如果在開發(fā)之中,你發(fā)現(xiàn)程序執(zhí)行速度變慢,那么就需要對(duì)程序內(nèi)存進(jìn)行分析:
可視化工具:jvisualvm (命令行執(zhí)行此命令) 或 jconsole
命令查看:jmap(jmap -heap PID)
他會(huì)將整個(gè)內(nèi)存空間的情況進(jìn)行取得;即日常開發(fā)下可用這兩者方法進(jìn)行查看調(diào)整堆內(nèi)存;
如果不會(huì)調(diào)內(nèi)存的話,可直接將-Xms 和 -Xmx 調(diào)成一樣大小即可。
1.《關(guān)于00000007b怎么解決,你需要知道這些深入JVM 原理(五)Java堆內(nèi)存調(diào)整參數(shù)(調(diào)優(yōu)關(guān)鍵)》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《關(guān)于00000007b怎么解決,你需要知道這些深入JVM 原理(五)Java堆內(nèi)存調(diào)整參數(shù)(調(diào)優(yōu)關(guān)鍵)》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/gl/2254909.html