天天看點

java虛拟機之java記憶體區域

Java記憶體區域
java虛拟機之java記憶體區域
1、程式計數器:

較小的記憶體空間,是目前線程所執行的位元組碼的行号訓示器,線程獨占區,如果執行的是Native方法,值為undefined.

2、Java虛拟機棧:

Java方法執行的動态記憶體模型。

    棧桢:每個方法在執行同時會建立一個棧桢(用于存儲局部變量表,操作數棧,動态連結,方法出口..)入棧到出棧的過程。

    局部變量表:存放編譯期可知的各種資料類型,引用類型,returnAddree類型

                  局部變量表的記憶體空間在編譯器完成配置設定,當進入一個方法時,這個方法需要在棧桢上配置設定多少記憶體是固定的,在方法執行期間不會改變局部變量表的大小。

java虛拟機之java記憶體區域
3.本地方法棧:

描述Native方法服務,HotSpot VM把Java虛拟機棧和本地方法棧合二為一。

4.Java堆:

存放對象執行個體

垃圾收集器管理的主要區域

新生代,老年代,Eden區,From/To區

區域劃分 目的:更好地回收記憶體,或者更快地配置設定記憶體

OutOfmemoryError異常

-Xms和-Xmx控制

5.方法區:

線程共享區域

存儲虛拟機加載的類資訊,常量,靜态變量,即時編譯器編譯後的代碼等資料。

類的版本,字段,方法,接口

方法區和永久代(并不等價)

垃圾回收在方法區的行為

異常定義:OutOfmemoryError異常

6.運作時常量池(方法區的一部分)

用于存放編譯器生成的各種字面量和符号引用,這部分内容将在類加載後進入方法區的運作時常量池中存放。

String s1="abc";---在常量池中

String s2="abc";---在常量池中

String s3=new String("abc");----直接在堆記憶體中

s3.intern();----轉移到運作時常量池中

java虛拟機之java記憶體區域
7.直接記憶體

jdk1.4加入NIO類,引入一種基于通道與緩沖區的I/O方式,使用Native函數直接配置設定堆外記憶體,然後通過一個存儲在Java堆中的DirectByteBuffer對象作為這塊記憶體的引用進行操作,提高性能,避免在Java堆和Native堆中來回複制資料。

其實記憶體還是會受到本機總記憶體大小以及處理器尋址空間的限制。

jvm