Java運行時數據區 ~待續

總是記不住這幾個運行時數據區,還是再捋一遍吧。

常見分類,一共5個區域,分爲2種類型:

  1. 線程共享
    1. 方法區 Method Area
    2. 堆內存 Heap
  2. 線程獨享
    1. 虛擬機棧 VM Stack
    2. 本地方法棧 Native Method Stack
    3. 程序計數器 Program Counter Register

1.方法區

存儲已被虛擬機加載的類型信息、常量、靜態變量、即時編譯後的代碼緩存等數據。

JDK6時,計劃放棄永久代,逐步改爲本地內存來實現方法區的計劃;

JDK7,把原本放在永久代的字符串常量池、靜態變量等移出;

JDK8,完全廢棄永久代的概念,改用在本地內存中實現的元空間Meta-space來代替,把JDK7遺留的(主要是類型信息)全部移到元空間中。

2.堆內存

G1收集器出現爲分界,之前,業界絕對主流的Hotspot虛擬機,內部垃圾收集器全部都基於“經典分代”來設計,需要新生代、老年代收集器搭配才能工作;之後,Hotspot虛擬機裏也出現了不採用分代設計的新垃圾收集器。

所有線程共享的Java堆中,可以劃分出多個線程私有的分配緩衝區(Thread Local Allocation Buffer, TLAB),以提升對象分配時的效率。

 

 

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