我們可以通過添加JVM啟動參數 -verbose:gc 或者在管理控制台上勾選詳細垃圾回收選項來打印更詳細的GC日誌,缺省日誌記錄文件是native_stderr.log文件。
不同的GC策略,日誌內容會有所不同,以下是optthruput策略時,記錄的詳細GC日誌:
<af type=”tenured” id=”24″ timestamp=”Dec 31 14:51:48 2015″ intervalms=”494944.872″>
af(allocation fail):觸發垃圾回收的事件,af為分配失敗。如果是sys,則表示應用程序有顯示調用System.gc()方法,不建議使用顯示gc()方法,可以通過 -Xdisableexplicitgc參數屏蔽顯式GC
type=”tenured”:GC類型,tenured/長存區的收集,另一種情況nursery/嬰兒區收集
id=”24″:tenured區GC的次數,這是第24次tenured區的垃圾回收
timestamp=”Dec 31 14:51:48 2015″:GC發生的時間戳
intervalms=”494944.872″:距離上一次GC的時間
<minimum requested_bytes=”16944″ />
申請的堆大小為16944byte,垃圾收集並分配後,freebytes可能下降超過這個大小。原因是空閑列表可能會被丟棄或線程本地堆(TLH)刷新
<time exclusiveaccessms=”0.059″ meanexclusiveaccessms=”0.059″ threads=”0″ lastthreadtid=”0x0000000017093E00″ />
exclusiveaccessms=”0.059″:準備GC前花費的時間0.059ms
<refs soft=”2363″ weak=”12244″ phantom=”774″ dynamicSoftReferenceThreshold=”9″ maxSoftReferenceThreshold=”32″ />
refs:提供關於java對象引用的信息
soft=”2363″:2363個SoftReference/軟引用對象。最先處理軟引用對象,如果內存空間足夠,就不會回收軟引用對象
weak=”12244″:12244個WeakReference/弱引用對象。軟引用對象處理完後,處理弱引用對象
phantom=”774″:774個PhantomReference/虛引用對象。弱引用對象處理完後,處理虛引用對象
dynamicSoftReferenceThreshold=”9″:軟引用對象在被回收前可以生存的GC周期,此值會動態調整,如果堆空間使用率很高,可能會降低此閾值
maxSoftReferenceThreshold=”32″:軟引用對象在被回收前可以生存的最大GC周期,32次
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ GC前堆空間使用情況↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<tenured freebytes=”10241336″ totalbytes=”64998400″ percent=”15″ >
freebytes=”10241336″:空閑空間10241336byte
totalbytes=”64998400″:總空間大小為64998400byte
percent=”15″:空閑空間約佔總空間大小的15%
<soa freebytes=”9781560″ totalbytes=”64538624″ percent=”15″ />
soa:小對象分配區域;在分配對象時,首先嘗試在小對象區域中進行分配。如果找不到足夠大小的可用項來滿足分配,並且請求的大小等於或大於64KB,那麼將再次在loa中嘗試分配。如果請求大小小於64KB或者loa中沒有足夠的連續空間,那麼將觸發分配故障。如果小對象區域中的可用自由空間量遠遠大於分配請求大小,但是還無法滿足請求,則表明堆中都是碎片。
freebytes=”9781560″:空閑空間9781560byte
totalbytes=”64538624″:總空間64538624byte
percent=”15″:空閑空間約佔總空間大小的15%
<loa freebytes=”459776″ totalbytes=”459776″ percent=”100″ />
loa:大對象分配區域;大對象區域是堆中保留給大對象分配的一小片區域。垃圾收集器會根據loa空間的使用情況來進行擴展或收縮
freebytes=”9781560″:空閑空間9781560byte
totalbytes=”64538624″:總空間64538624byte
percent=”15″:空閑空間約佔總空間大小的100%,即未使用
</tenured>
<pending-finalizers finalizable=”592″ reference=”5″ classloader=”0″ />
pending-finalizers:表示可終結隊列的當前狀態
<gc type=”global” id=”26″ totalid=”26″ intervalms=”494945.222″>
type=”global”:global/全局收集,另一種情況為scavenger/清掃
id=”26″:這是第26次發生全局GC
totalid=”26″:GC總共發生了26次
intervalms=”494945.222″:此次GC花費了494945.222ms
<finalization objectsqueued=”592″ />
<timesms mark=”95.729″ sweep=”1.073″ compact=”0.000″ total=”96.912″ />
mark=”95.729″:標記花費的時間95.729ms
sweep=”1.073″:清掃花費的時間1.073ms
compact=”0.000″:壓縮花費的時間 0.000ms,未發生壓縮
total=”96.912″:此次GC共花費了96.912ms
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ GC後堆空間使用情況↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<tenured freebytes=”22360600″ totalbytes=”64998400″ percent=”34″ >
freebytes=”22360600″:空閑空間22360600byte
totalbytes=”64998400″:總空間64998400byte
percent=”34″:空閑空間約佔總空間大小的34%
<soa freebytes=”21966360″ totalbytes=”64604160″ percent=”34″ />
soa:小對象分配區域;
freebytes=”21966360″:空閑空間21966360byte
totalbytes=”64604160″:總空間64604160byte
percent=”34″:空閑空間約佔總空間大小的34%
<loa freebytes=”394240″ totalbytes=”394240″ percent=”100″ />
soa:大對象分配區域;
freebytes=”394240″:空閑空間394240byte
totalbytes=”394240″:總空間394240byte
percent=”100″:空閑空間100%
</tenured>
</gc>
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓滿足分配後堆空間使用情況↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<tenured freebytes=”22343656″ totalbytes=”64998400″ percent=”34″ >
<soa freebytes=”21949416″ totalbytes=”64604160″ percent=”33″ />
<loa freebytes=”394240″ totalbytes=”394240″ percent=”100″ />
</tenured>
<refs soft=”2354″ weak=”12073″ phantom=”774″ dynamicSoftReferenceThreshold=”11″ maxSoftReferenceThreshold=”32″ />
<pending-finalizers finalizable=”592″ reference=”5″ classloader=”0″ />
<time totalms=”97.038″ />
</gc>
以下文章點擊率最高
Loading…