標籤:輸送量 heap tail 記憶體回收 效能 產生 標記 新生代 系統效能
方法區、堆、棧、程式計數器、本地方法棧
方法區(永久去):類定義,常量,靜態變數,各個線程共用的記憶體地區,即時編譯的代碼
heap:類對象,list,數組 線程共用區
棧:程式執行時是線程,線程執行就是調用方法,有(局部變數),每個線程都有自己的(線程私人的);每個方法調用都產生一個棧幀,調用方法就是入棧出棧
如果方法一直嵌套調用就會一直壓棧,就可能會出現棧溢出,
程式計數器:程式執行到哪一行了。
本地方法棧:和本地平台(作業系統)叫用作業系統的方法
記憶體回收;
堆:根據對象存活的年齡,分為新生代young Generation,老年代Old,
young Generation分為Eden space 和 Survivor(from,to(不會用))地區
記憶體回收演算法掃描Edenspace 如果有價值的留下來放在survivor(from) 區, 經過預設15次以後還留下來了則放入Oldgegnration
如何回收,
標記-清除 如果對象太大,可以直接放在老年代
標記-整理
複製-演算法 (to是用來騰挪的)
啟動java 虛擬機器時可以設定Eden 和suivivor的比例,
老年代和新生代一樣大
記憶體回收實現
記憶體回收行程
serial收集器 stop the world 全量回收
serial old 收集器
parnew收集器
輸送量優先的,Parallel Scavenger收集器
CMS收集器 伺服器端用的比價多(預設)
G1 回收器
-XX +Use記憶體回收
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
-Xmx3550m:最大堆記憶體為3550M。
-Xms3550m:初始堆記憶體為3550m。
此值可以設定與-Xmx相同,以避免每次記憶體回收完成後JVM重新分配記憶體。
-Xmn2g:設定年輕代大小為2G。
整個堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代後,將會減小年老代大小。此值對系統效能影響較大,Sun官方推薦配置為整個堆的3/8。
-Xss128k:設定每個線程的堆棧大小。
JDK5.0以後每個線程堆棧大小為1M,在相同實體記憶體下,減小這個值能產生更多的線程。但是作業系統對一個進程內的線程數還是有限制的,不能無限產生,經驗值在 3000~5000左右。
-XX:NewRatio=4:設定年輕代(包括Eden和兩個Survivor區)與年老代的比值(除去持久代)。設定為4,則年輕代與年老代所佔比值為1:4,年輕代占整個堆棧的1/5
-XX:SurvivorRatio=4:設定年輕代中Eden區與Survivor區的大小比值。
設定為4,則兩個Survivor區與一個Eden區的比值為2:4,一個Survivor區占整個年輕代的1/6
-XX:MaxPermSize=16m:設定持久代大小為16m。
-XX:MaxTenuringThreshold=15:設定垃圾最大年齡。
如果設定為0的話,則年輕代對象不經過Survivor區,直 接進入年老代。對於年老代比較多的應用,可以提高效率。如果將此值設定為一個較大值,則年輕代對象會在Survivor區進行多次複製,這樣可以增加對象 再年輕代的存活時間,增加在年輕代即被回收的概論。
收集器設定
-XX:+UseSerialGC:設定串列收集器
-XX:+UseParallelGC:設定並行收集器
-XX:+UseParalledlOldGC:設定並行年老代收集器
-XX:+UseConcMarkSweepGC:設定並發收集器
記憶體回收統計資訊
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
並行收集器設定
-XX:ParallelGCThreads=n:設定並行收集器收集時使用的CPU數。並行收集線程數。
-XX:MaxGCPauseMillis=n:設定並行收集最大暫停時間
-XX:GCTimeRatio=n:設定記憶體回收時間占程式已耗用時間的百分比。公式為1/(1+n)
並發收集器設定
-XX:+CMSIncrementalMode:設定為增量模式。適用於單CPU情況。
-XX:ParallelGCThreads=n:設定並發收集器年輕代收集方式為並行收集時,使用的CPU數。並行收集線程數。
java虛擬機器學習