1. 程式人生 > >java虛擬機 jvm java堆 方法區 java棧

java虛擬機 jvm java堆 方法區 java棧

相同 分享 就會 例如 content == 不同的 avi 管理

java堆是java應用程序最密切的內存空間。

差點兒全部的對象都存在堆中。java堆全然自己主動化管理,通過垃圾回收機制,垃圾對象會自己主動清理。不須要顯式釋放。

依據java垃圾回收機制的不同。java堆可能有不同的結構。

最常見的是將整個java堆分為新生代和老年代。跟人類幾乎相同了。老齡化就有可能找上帝去了,新生代存放新對象或者年齡不大的對象,老年代存放老年對象。新生代有可能分為eden區、s0區和s1區,s0區和s1區也被稱之為 from to區域。他們是兩塊大小相等能夠互換的內存空間例如以下圖所看到的:

技術分享

在大多數情況下。對象首先被分配在eden區,再一次新生代回收後,假設對象還存在,則會進入

s0或者s1,之後沒經過一個新生代回收,年齡+1.當對象年齡達到一定條件後,就會老齡化進入老年代。

以下一個簡單的實例展示java堆、java方法區、java棧之間的關系。代碼例如以下:

package cn.xhgg.test;
public class HeapTest {
private int id;
public HeapTest(int id) {
this.id = id;
}
public void show() {
System.out.println("id:  "+id);
}
public static void main(String[] args) {
HeapTest h1 = new HeapTest(1);
HeapTest h2 = new HeapTest(3);
h1.show();
h2.show();
}
}


HeapTest 實例引用類型肯定分配在堆中、h1h2局部變量存放在java棧中、並指向堆中的兩個實例。

例如以下圖所看到的:

技術分享


java虛擬機 jvm java堆 方法區 java棧