程序計(jì)數(shù)器:作用可以看成當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器。為了線程切換后能恢復(fù)到正確的執(zhí)行位置,每條線程都需要有一個(gè)獨(dú)立的程序計(jì)數(shù)器,各條線程之間的計(jì)數(shù)器互不影響,獨(dú)立存儲(chǔ)。---線程私有

虛擬機(jī)棧描述JAVA方法執(zhí)行的內(nèi)存模型,每個(gè)方法被執(zhí)行的時(shí)候都會(huì)同時(shí)創(chuàng)建一個(gè)棧幀用于存儲(chǔ)局部變量表,操作數(shù)棧,動(dòng)態(tài)鏈接,方法出口燈信息。每個(gè)方法被調(diào)用直至執(zhí)行完成的過程,就對(duì)應(yīng)著一個(gè)棧幀在虛擬機(jī)棧中從入棧到出棧的過程。局部變量表存放了編譯期可知的各種基本數(shù)據(jù)類型和對(duì)象引用類型,所需內(nèi)存空間在編譯期間完成分配。---線程私有

虛擬機(jī)棧中的兩種異常狀況:如果線程請(qǐng)求的棧深度大于虛擬機(jī)允許的深度,拋出StackOverflowError;如果虛擬機(jī)棧可以動(dòng)態(tài)擴(kuò)展,當(dāng)擴(kuò)展無法申請(qǐng)到足夠的內(nèi)存時(shí)拋出OutOfMemoryError。

本地方法棧:為虛擬機(jī)使用到的Native方法服務(wù)。---線程私有

JAVA是被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建。所有的對(duì)象實(shí)例以及數(shù)組都要在堆中分配,垃圾收集器管理的主要區(qū)域。

方法區(qū)存儲(chǔ)被虛擬機(jī)加載的類信息(類名、訪問修飾符、字段描述、方法描述等)、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。垃圾收集器主要是針對(duì)該區(qū)域的常量的回收和對(duì)類型的卸載。

運(yùn)行時(shí)常量池(屬于方法區(qū)部分):存放編譯期生成的各種字面量和符號(hào)引用。動(dòng)態(tài)性:運(yùn)行期間也可能將新的常量放入池中,如String類的intern()方法。

直接內(nèi)存:堆外內(nèi)存,新IO類中引入的機(jī)遇通道Channel與緩沖的I/O方式,使用Native函數(shù)庫(kù)直接分配對(duì)外內(nèi)存。

配置參數(shù)

  1. -Xnoclassgc  關(guān)閉類垃圾回收功能
  2. -Xincgc      開啟類的垃圾回收功能
  3. –Xms<size>  設(shè)置JVM初始化堆內(nèi)存大小
  4. –Xmx<size>  設(shè)置JVM最大的堆內(nèi)存大小
  5. –Xss<size>   設(shè)置JVM棧內(nèi)存大小