面試之 Java內存模型

1. Java內存模型

1.1. Java內存模型

Java內存模型(Java Memory Model ,JMM)就是一種符合內存模型規範的,屏蔽了各種硬件和操作系統的訪問差異的,保證了Java程序在各種平臺下對內存的訪問都能保證效果一致的機制及規範。

 

1.2. Jvm內存模型

1.2.1. 

所有對象實例及數組都要在堆上分配內存但隨着JIT編譯器的發展和逃逸分析技術的成熟可將這些變量直接在棧上進行分配它是所有線程共享的區域,也是gc的主要區域。

默認情況下對大小爲1/64~1/4通過-Xms(最小值)和-Xmx(最大值)參數設置一般都設置相等,服務器一般內存都足夠。以避免堆大小的伸縮帶來的性能損耗。

堆內存 = 新生代+老生代+持久代默認新生代和老生代(大小比例1:2新生代=Eden+Eden和Survivor0,Survivor1組成,三者的比例是8:1:1

新生代的回收機制採用複製算法老生代採用的回收算法是標記整理算法

1.2.2. 方法區

是所有線程共享的內存區域,爲了區分堆,又被稱爲非堆用於存儲已被虛擬機加載的類信息、常量、靜態變量

運行時常量池是方法區的一部分存放編譯期間生成的各種字面量和符號引用。

方法區也稱"永久代"jdk1.8,已經移除,取而代之是元空間(Metaspace),可以通過MaxMetaspaceSize進行設置,但是受限本地內存,默認是根據運行時動態調整

1.2.3. 

## 描述的是java方法執行的內存模型

##每個方法被調用到執行完的過程,就對應着一個棧幀在虛擬機棧中從入棧到出棧的過程聲明週期與線程相同,是線程私有的

##棧幀由三部分組成:局部變量區、操作數棧、幀數據區

1.2.4. 程序計數器

由於cpu運行速度極快,可以同時處理多個線程,在線程切換,切換的時候需要知道線程執行到哪裏了。程序計數器是唯一個不會內存溢出的地方。

 

1.2.5. 本地方法區

調用c或者c++代碼地方

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章