程序計數(shù)器:作用可以看成當前線程所執(zhí)行的字節(jié)碼的行號指示器。為了線程切換后能恢復(fù)到正確的執(zhí)行位置,每條線程都需要有一個獨立的程序計數(shù)器,各條線程之間的計數(shù)器互不影響,獨立存儲。---線程私有
虛擬機棧:描述JAVA方法執(zhí)行的內(nèi)存模型,每個方法被執(zhí)行的時候都會同時創(chuàng)建一個棧幀用于存儲局部變量表,操作數(shù)棧,動態(tài)鏈接,方法出口燈信息。每個方法被調(diào)用直至執(zhí)行完成的過程,就對應(yīng)著一個棧幀在虛擬機棧中從入棧到出棧的過程。局部變量表存放了編譯期可知的各種基本數(shù)據(jù)類型和對象引用類型,所需內(nèi)存空間在編譯期間完成分配。---線程私有
虛擬機棧中的兩種異常狀況:如果線程請求的棧深度大于虛擬機允許的深度,拋出StackOverflowError;如果虛擬機棧可以動態(tài)擴展,當擴展無法申請到足夠的內(nèi)存時拋出OutOfMemoryError。
本地方法棧:為虛擬機使用到的Native方法服務(wù)。---線程私有
JAVA堆:是被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機啟動時創(chuàng)建。所有的對象實例以及數(shù)組都要在堆中分配,垃圾收集器管理的主要區(qū)域。
方法區(qū):存儲被虛擬機加載的類信息(類名、訪問修飾符、字段描述、方法描述等)、常量、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù)據(jù)。垃圾收集器主要是針對該區(qū)域的常量的回收和對類型的卸載。
運行時常量池(屬于方法區(qū)部分):存放編譯期生成的各種字面量和符號引用。動態(tài)性:運行期間也可能將新的常量放入池中,如String類的intern()方法。
直接內(nèi)存:堆外內(nèi)存,新IO類中引入的機遇通道Channel與緩沖的I/O方式,使用Native函數(shù)庫直接分配對外內(nèi)存。
配置參數(shù):
- -Xnoclassgc 關(guān)閉類垃圾回收功能
- -Xincgc 開啟類的垃圾回收功能
- –Xms<size> 設(shè)置JVM初始化堆內(nèi)存大小
- –Xmx<size> 設(shè)置JVM最大的堆內(nèi)存大小
- –Xss<size> 設(shè)置JVM棧內(nèi)存大小
棧是存放基本類型和對象引用;
堆是存放對象實例的;
一度有人糾正,說搞反了,自己也沒去查。呵呵!