首頁 >Java >java教程 >java堆是什麼?

java堆是什麼?

青灯夜游
青灯夜游原創
2019-12-26 15:52:164013瀏覽

java堆是什麼?

對大多數應用程式來說,Java堆(Java Heap)是Java虛擬機器所管理的記憶體中最大的一塊。 Java堆是被所有執行緒共享的一塊記憶體區域,在虛擬機器啟動時創建。此記憶體區域的唯一目的就是存放物件實例,幾乎所有的物件實例都在這裡分配記憶體。這一點在Java虛擬機規範中的描述是:所有的物件實例以及數組都要在對上分配內存,但是隨著JIT編譯器的發展與逃逸分析技術逐漸成熟,棧上分配、標量替換優化技術將會導致一些微妙的變化發生,所有的物件都分配在堆上也漸漸變得不是那麼「絕對」了。

Java堆是垃圾收集器管理的主要區域,因此很多時候也被稱為「GC堆」(Garbage Collected heap)。從記憶體回收的角度來看,由於現在收集器基本上都採用分代收集演算法,所以Java 堆中還可以細分為:新生代和老年代;在細緻一點的有Eden空間、From Survivor空間、To Survivor空間等。從記憶體分配的角度來看,執行緒共享的Java 堆中可能會分割出多個執行緒私有的分配緩衝區。不過無論如何劃分,都與存放內容無關,無論哪個區域,存儲的都仍然是對象實例,進一步劃分的目的是為了更好地回收內存,或者更快地分配內存。

根據Java虛擬機器規格的規定,Java堆可以處於物理上不連續的記憶體空間中,只要邏輯上是連續的即可,就像我們的磁碟空間一樣。在實現時,既可以實現固定大小的,也可以是擴展的,不過當前主流的虛擬機都是按照可擴展來實現的。如果在堆中沒有記憶體完成實例分配,且堆也無法再擴充時,將會拋出OutOfMemoryError異常。

總結

1、java堆是java虛擬機器管理的記憶體最大的一塊

2、java堆是被所有線程共享的

3、java堆的主要功能是存放物件實例

4、ava堆是垃圾收集器管理的主要區域

5、收集器基本上都採用分代收集演算法

6、java堆可以分為新生代和老年代,再細緻還可以分為Eden區,From Surivor區,To Surivor區

#推薦學習:Java影片教學

以上是java堆是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn