墨陌之提示您:看後求收藏(第189章 ,/.,帶著遊戲賬號流浪,墨陌之,630看書),接著再看更方便。

請關閉瀏覽器的閱讀/暢讀/小說模式並且關閉廣告遮蔽過濾功能,避免出現內容無法顯示或者段落錯亂。

5、堆和棧的區別

棧是執行時單位,代表著邏輯,內含基本資料型別和堆中物件引用,所在區域連續,沒有碎片;堆是存 儲單位,代表著資料,可被多個棧共享(包括成員中基本資料型別、引用和引用物件),所在區域不連 續,會有碎片。

1、功能不同

棧記憶體用來儲存區域性變數和方法呼叫,而堆記憶體用來儲存java中的物件。無論是成員變數,區域性變數, 還是類變數,它們指向的物件都儲存在堆記憶體中。

2、共享性不同

棧記憶體是執行緒私有的。

堆記憶體是所有執行緒共有的。

3、異常錯誤不同

如果棧記憶體或者堆記憶體不足都會丟擲異常。

棧空間不足:javangstackoverflowerror。堆空間不足:javangoutoforyerror。

4、空間大小

棧的空間大小遠遠小於堆的。

6、什麼時候會觸發fullgc

除直接呼叫systegc外,觸發full gc執行的情況有如下四種。

舊生代空間不足

舊生代空間只有在新生代物件轉入及建立為大物件、大陣列時才會出現不足的現象,當執行full gc後空間仍然不足,則丟擲如下錯誤:

javangoutoforyerror: java heap space

為避免以上兩種狀況引起的fullgc,調優時應儘量做到讓物件在or gc階段被回收、讓物件在新生代多存活一段時間及不要建立過大的物件及陣列。

pera neration空間滿

peraneration中存放的為一些css的資訊等,當系統中要載入的類、反射的類和呼叫的方法較 多時,pera neration可能會被佔滿,在未配置為採用s gc的情況下會執行full gc。如果經過full gc仍然回收不了,那麼jv會丟擲如下錯誤資訊:

javangoutoforyerror: pern space

為避免per n佔滿造成full gc現象,可採用的方法為增大per n空間或轉為使用s gc。

s gc時出現prootion failed和ncurrent ode faire

對於採用s進行舊生代gc的程式而言,尤其要注意gc日誌中是否有prootion failed和ncurrent ode faire兩種狀況,當這兩種狀況出現時可能會觸發full gc。

prootionfailed是在進行or gc時,survivor space放不下、物件只能放入舊生代,而此時舊生代也放不下造成的;ncurrent ode faire是在執行s gc的過程中同時有物件要放入舊生代,而此時舊生代空間不足造成的。

應對措施為:增大survivorspace、舊生代空間或調低觸發併發gc的比率,但在jdk 50+、60+的版本中有可能會由於jdk的bug29導致s在reark完畢後很久才觸發sweepg動作。對於這種狀況,可透過設定-xx:saxabortableprecleanti=5(單位為s)來避免。

統計得到的or gc晉升到舊生代的平均大小大於舊生代的剩餘空間

這是一個較為複雜的觸發情況,hotspot為了避免由於新生代物件晉升到舊生代導致舊生代空間不足的 現象,在進行or gc時,做了一個判斷,如果之前統計所得到的or gc晉升到舊生代的平均大小大於舊生代的剩餘空間,那麼就直接觸發full gc。

例如程式第一次觸發c後,有6b的物件晉升到舊生代,那麼當下一次or gc發生時,首先檢查舊生代的剩餘空間是否大於6b,如果小於6b,則執行full gc。

當新生代採用psgc時,方式稍有不同,ps gc是在or gc後也會檢查,例如上面的例子中第一次or gc後,ps gc會檢查此時舊生代的剩餘空間是否大於6b,如小於,則觸發對舊生代的回收。除了以上4種狀況外,對於使用ri來進行rpc或管理的sun jdk應用而言,預設情況下會一小時執行一次full gc。可透過在啟動時透過- j

本章未完,點選下一頁繼續閱讀。

其他小說相關閱讀More+

終此一生

蘇其

林總家的小男友重生了

彼岸鮮枝

快穿:BE後我成了男主的白月光

夜沐歌