線程共享區(qū)域
- 方法區(qū)(元空間):
- 1.存放類(lèi)的常量、靜態(tài)變量魏滚、類(lèi)的描述信息(元信息:類(lèi)的全限定名稱(chēng)等)坟漱;常量存儲(chǔ)在運(yùn)行時(shí)常量池中
- 2.當(dāng)一個(gè)類(lèi)被Java虛擬機(jī)加載后,class文件中的常量就存放在方法區(qū)的運(yùn)行時(shí)常量池中腥寇。而且在運(yùn)行期間觅捆,可以向常量池中添加新的常量。如:String類(lèi)的intern()方法就能在運(yùn)行期間向運(yùn)行時(shí)常量池中添加字符串常量
- 堆:
- 1.存放對(duì)象及數(shù)組扩劝。如:new String(“hello”)职辅,這個(gè)“hello”屬于這個(gè)字符串對(duì)象,所以在堆中簇秒。
- 2.是OOM的重災(zāi)區(qū)秀鞭,<性能調(diào)優(yōu)>階段再說(shuō)
JVM內(nèi)存模型.png
線程獨(dú)立區(qū)域
- 棧:
- 1.包含多個(gè)棧幀锋边,每個(gè)棧幀對(duì)應(yīng)一個(gè)方法
- 2.每個(gè)棧幀中包含局部變量表(如果變量為對(duì)象類(lèi)型,則保存的為對(duì)象在堆中的引用地址)剩辟、操作數(shù)棧、動(dòng)態(tài)鏈接(包含一個(gè)在常量池中對(duì)當(dāng)前方法的引用)贩猎、方法出口
- 本地方法棧:非Java程序方法(Native方法)
- 程序計(jì)數(shù)器:存放執(zhí)行指令的偏移量和行號(hào)指示器等,保證了多個(gè)線程切換時(shí)的線程暫停與恢復(fù)