《深入理解java虛擬機》筆記---------------------JVM內存區域

Java虛擬機運行時數據區域:

1.程序計數器

a)      類似於計算機組織原理中PC計數器。

b)      線程私有。

c)       唯一一個沒有OOM的區域。

2.Java虛擬機棧

a)      線程私有。

b)      相當於棧內存,每個元素爲一個棧幀。

3.本地方法棧

a)      用於執行Native方法(所謂Native方法就是用C語言等較底層語言寫的方法)。

4.Java堆

a)      存放對象地方。

b)      分爲新生代和老年代。

5.方法區

a)      所有的類被虛擬機加載後存放在此處。

b)      被稱爲“永久代”。(剛看的時候有點疑惑,想不明白這個名稱到底有什麼含義,學到後面的GC還有類加載章節後才慢慢有點感悟。因爲在java虛擬機的運行時數據區域的大小是有限的,裏面的數據滿了以後就會發生溢出,所以要時刻進行垃圾收集。雖然垃圾收集動作重點集中在java堆中,但是方法區裏面也存在大量數據,不進行垃圾收集的話也有可能會發生內存泄漏。不過方法區的垃圾收集相對較少,這也是被稱爲“永久代”的原因,幾乎永遠不會被收集,這是因爲方法區存放的是類被加載後的信息,相當於把class文件進一步處理得到的信息,這些信息是準備在運行時刻被使用的。如果被垃圾收集,等到再需要時又要重新加載就會非常耗時,所以通常很少被GC。這只是我自己的理解歡迎大家指正。)

6.運行時常量池

a)      是方法區的一部分。

b)      存放編譯期生成的各種字面量和符號引用。

c)       有時候翻譯出來的直接引用也存儲在運行時常量池中。

d)      運行期間也有可能將新的常量放入池中,例如string類的intern()方法。

7.直接內存

Java虛擬機運行時數據區域:

1.程序計數器

a)      類似於計算機組織原理中PC計數器。

b)      線程私有。

c)       唯一一個沒有OOM的區域。

2.Java虛擬機棧

a)      線程私有。

b)      相當於棧內存,每個元素爲一個棧幀。

3.本地方法棧

a)      用於執行Native方法(所謂Native方法就是用C語言等較底層語言寫的方法)。

4.Java堆

a)      存放對象地方。

b)      分爲新生代和老年代。

5.方法區

a)      所有的類被虛擬機加載後存放在此處。

b)      被稱爲“永久代”。(剛看的時候有點疑惑,想不明白這個名稱到底有什麼含義,學到後面的GC還有類加載章節後才慢慢有點感悟。因爲在java虛擬機的運行時數據區域的大小是有限的,裏面的數據滿了以後就會發生溢出,所以要時刻進行垃圾收集。雖然垃圾收集動作重點集中在java堆中,但是方法區裏面也存在大量數據,不進行垃圾收集的話也有可能會發生內存泄漏。不過方法區的垃圾收集相對較少,這也是被稱爲“永久代”的原因,幾乎永遠不會被收集,這是因爲方法區存放的是類被加載後的信息,相當於把class文件進一步處理得到的信息,這些信息是準備在運行時刻被使用的。如果被垃圾收集,等到再需要時又要重新加載就會非常耗時,所以通常很少被GC。這只是我自己的理解歡迎大家指正。)

6.運行時常量池

a)      是方法區的一部分。

b)      存放編譯期生成的各種字面量和符號引用。

c)       有時候翻譯出來的直接引用也存儲在運行時常量池中。

d)      運行期間也有可能將新的常量放入池中,例如string類的intern()方法。

7.直接內存

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