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