Java面试题 简述jvm内存模型?
程序計數(shù)器:線程私有,各線程之間獨(dú)立儲存,互不影響,若當(dāng)前執(zhí)行的是Java方法,則記錄的就是當(dāng)前執(zhí)行指令的地址,若是native方法,則為空;
java虛擬機(jī)棧:線程私有,每個方法在執(zhí)行時都會創(chuàng)建一個棧幀,方法執(zhí)行過程就是棧幀在虛擬機(jī)棧中從入棧到出棧的過程,入棧表示方法開始被調(diào)用,出棧表示方法執(zhí)行完畢,棧幀用于保存方法內(nèi)部局部變量、操作數(shù)、方法返回值、動態(tài)鏈接;我們平時說的棧其實(shí)一般就是指局部變量區(qū):用于存放方法參數(shù)、方法內(nèi)定義的局部變量,還有已知的八大基本數(shù)據(jù)類型、對象引用、返回值地址;
本地方法棧:線程私有,和虛擬機(jī)棧相似,區(qū)別在于虛擬機(jī)棧的服務(wù)對象是java方法,而本地方法棧是本地方法;
堆:線程共享,在虛擬機(jī)啟動的時候創(chuàng)建,用于存放對象實(shí)例,堆是GC管理的主要區(qū)域;
方法區(qū):線程共享,其實(shí)方法區(qū)也是堆的物理組成部分,用于存放常量、靜態(tài)變量 、 類信息(構(gòu)造方法/接口定義) 、運(yùn)行時常量池;注意, 實(shí)例變量在堆內(nèi)存中,和方法區(qū)無關(guān)。
(jdk1.8之前,方法區(qū)的實(shí)現(xiàn)是永久代,從1.8開始,用元空間代替了永久代,注意一點(diǎn),方法區(qū)還是那個方法區(qū))
這一坨內(nèi)容請酌情觀看,我怕把你繞暈~
再細(xì)分的話還有運(yùn)行時常量池和字符串常量池:jdk1.6的時候,兩者都是屬于方法區(qū),1.7開始,字符串常量池被移到了堆內(nèi)存;運(yùn)行時常量池用于存放編譯期生成的各種常量(“abc”,123等)和符號引用;而字符串常量池是為了提高jvm效率單獨(dú)用來存放字符串的,因?yàn)樽址煌谄渌麛?shù)據(jù)類型,它可以很長很長。
總結(jié)
以上是生活随笔為你收集整理的Java面试题 简述jvm内存模型?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java面试题 Java中sleep和w
- 下一篇: Java面试题 synchronized