JAVA虛擬機管理內存
- 作者:新網(wǎng)
- 來源:新網(wǎng)
- 瀏覽:100
- 2018-05-10 13:21:43
虛擬機的運行時數(shù)據(jù)區(qū)管理著內存,分為五個區(qū)域。方法區(qū),虛擬機棧,本地方法棧(有些虛擬機把這兩個棧合二為一),堆,程序計數(shù)器。
JAVA虛擬機管理內存
<
div> 虛擬機的運行時數(shù)據(jù)區(qū)管理著內存,分為五個區(qū)域。方法區(qū),虛擬機棧,本地方法棧(有些虛擬機把這兩個棧合二為一),堆,程序計數(shù)器。
程序計數(shù)器: 每個線程處理Java方法執(zhí)行位置的程序計數(shù)器所在內存區(qū)域。本地方法計數(shù)器為空,屬于線程私有,即線程各自的程序計數(shù)器互不干擾。這個不會彈溢出異常,其余區(qū)域都會彈溢出異常。
Java虛擬機棧 :Java方法執(zhí)行時,創(chuàng)建一個棧幀,保存局部變量表,方法出口等方法相關信息,屬于線程私有區(qū)域。
本地方法棧:與Java虛擬機棧相似,本地方法執(zhí)行時,保存方法相關信息。
Java堆:存放對象的內存區(qū)域。里面可以分為線程共享區(qū)域和線程私有區(qū)域。
方法區(qū):屬于線程共享區(qū)域,存儲類信息,靜態(tài)變量,代碼。
當創(chuàng)建線程過多時,會彈出OutOfMemory異常,這是因為系統(tǒng)內存不足以分配Java虛擬機請求的棧內存。如果在方法中死循環(huán)爆出異常,這是StackOutOfMomory異常。棧的大小超出虛擬機規(guī)定大小。
堆又分為老年代和新生代(方法區(qū)被稱作永久代),老年代主要采用標記整理方法清理內存,新生代通過復制法清理內存。復制法思想將新生代區(qū)分為eden區(qū)和兩個survior區(qū),清理eden區(qū)和其中一個survior區(qū),將存活的引用復制到另一個survior區(qū),如果survior區(qū)大小不夠,向老年代借
空間存儲。minorGC和FullGC不同之處,minorGC只清理新生代,F(xiàn)ullGC連老年代也清理。
判斷對象已死的算法是根搜索算法。