本章知識(shí)點(diǎn)
■?Trace跟蹤參數(shù)
■ 堆的分配參數(shù)
■ 棧的分配參數(shù)
Trace跟蹤參數(shù)
■ -verbose:gc
■ -XX:+printGC
■ 可以打印GC的簡(jiǎn)要信息
? ??? [GC 4790K->374K(15872K), 0.0001606 secs]
????? [GC 4790K->374K(15872K), 0.0001474 secs]
????? [GC 4790K->374K(15872K), 0.0001563 secs]
????? [GC 4790K->374K(15872K), 0.0001682 secs]
■ -XX:+PrintGCDetails:打印GC詳細(xì)信息
■?-XX:+PrintGCTimeStamps:打印GC發(fā)生的時(shí)間戳
■?[GC[DefNew: 4416K->0K(4928K), 0.0001897 secs] 4790K->374K(15872K), 0.0002232 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
■ -XX:+PrintGCDetails的輸出
????? Heap
????? def new generation?? total 13824K, used 11223K [0x27e80000, 0x28d80000, 0x28d80000)
??????eden space 12288K,? 91% used [0x27e80000, 0x28975f20, 0x28a80000)
??????from space 1536K,?? 0% used [0x28a80000, 0x28a80000, 0x28c00000)
??????to?? space 1536K,?? 0% used [0x28c00000, 0x28c00000, 0x28d80000)
????? tenured generation?? total 5120K, used 0K [0x28d80000, 0x29280000, 0x34680000) ??????the space 5120K,?? 0% used [0x28d80000, 0x28d80000, 0x28d80200, 0x29280000) ????? compacting perm gen? total 12288K, used 142K [0x34680000, 0x35280000, 0x38680000)
??????the space 12288K,?? 1% used [0x34680000, 0x346a3a90, 0x346a3c00, 0x35280000)
·? ???ro space 10240K,? 44% used [0x38680000, 0x38af73f0, 0x38af7400, 0x39080000)? ??????rw space 12288K,? 52% used [0x39080000, 0x396cdd28, 0x396cde00, 0x39c80000)
■ -Xloggc:log/gc.log
???? ? 指定GC log的位置,以文件輸出
???? ? 幫助開(kāi)發(fā)人員分析問(wèn)題
■?-XX:+TraceClassLoading
? ?? ??監(jiān)控類(lèi)的加載
■?-XX:+PrintClassHistogram
??? ? 按下Ctrl+Break后,打印類(lèi)的信息
堆的分配參數(shù)
■? -Xmx –Xms
????? 指定最大堆和最小堆
? ??? -Xmx20m -Xms5m? 運(yùn)行代碼
■?-Xmn
? ? ? 設(shè)置新生代大小
■?-XX:NewRatio
? ????新生代(eden+2*s)和老年代(不包含永久區(qū))的比值
??????4 表示 新生代:老年代=1:4彩倚,即年輕代占堆的1/5
■?-XX:SurvivorRatio
? ? ? 設(shè)置兩個(gè)Survivor區(qū)和eden的比
? ??? 8表示 兩個(gè)Survivor :eden=2:8赶熟,即一個(gè)Survivor占年輕代的1/10
■ -XX:+HeapDumpOnOutOfMemoryError
? ? ? OOM時(shí)導(dǎo)出堆到文件
■?-XX:+HeapDumpPath
? ??? 導(dǎo)出OOM的路徑值
■?-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump
■ -XX:OnOutOfMemoryError
? ??? 在OOM時(shí),執(zhí)行一個(gè)腳本
? ??? "-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p“
? ????當(dāng)程序OOM時(shí)剩辟,在D:/a.txt中將會(huì)生成線程的dump
??????可以在OOM時(shí),發(fā)送郵件,甚至是重啟程序?
堆的分配參數(shù) – 總結(jié)
■ 根據(jù)實(shí)際事情調(diào)整新生代和幸存代的大小
■?官方推薦新生代占堆的3/8
■?幸存代占新生代的1/10
■?在OOM時(shí)洲尊,記得Dump出堆远豺,確保可以排查現(xiàn)場(chǎng)問(wèn)題
永久區(qū)分配參數(shù)
■?-XX:PermSize ?-XX:MaxPermSize
? ?? ??設(shè)置永久區(qū)的初始空間和最大空間
? ?? ? 他們表示颊郎,一個(gè)系統(tǒng)可以容納多少個(gè)類(lèi)型
■?使用CGLIB等庫(kù)的時(shí)候憋飞,可能會(huì)產(chǎn)生大量的類(lèi),這些類(lèi)姆吭,有可能撐爆永久區(qū)導(dǎo)致OOM
■ 打開(kāi)堆的Dump
? ? ? 堆空間實(shí)際占用非常少
? ??? 但是永久區(qū)溢出 一樣拋出OOM
棧大小分配
■?-Xss
????? 通常只有幾百K
????? 決定了函數(shù)調(diào)用的深度
????? 每個(gè)線程都有獨(dú)立的楅蛔觯空間
????? 局部變量、參數(shù) 分配在棧上