1. 程式人生 > >Java虛擬機之JVM系統和內存模型

Java虛擬機之JVM系統和內存模型

內存空間 永久 區域 blog 一個 程序計數器 資源 log ogr

1、類加載子系統

  負責從文件系統或者網絡中加載Class信息,加載的信息存放在一塊稱之為方法區的內存空間裏。

2、方法區

  存放類信息、常量信息、常量池信息、包括字符串字面量和數字常量等,方法區的大小決定了系統可以保存多少個類。方法區可以理解為永久區(Perm)。

3、Java堆

  在Java虛擬機啟動的時候建立java堆,它是java最主要的內存工作區域,幾乎所有的對象實例都存放到java堆中,堆空間是所有線程共享的。

4、直接內存

  Java的NIO庫允許Java程序使用直接內存,從而提高性能,通常直接內存速度會優於java堆,讀寫頻繁的場合可能會考慮使用。

5、Java棧

  每個虛擬機線程都有一個私有的棧,一個線程的java棧在線程創建的時候被創建,java棧中保存著局部變量、方法參數、java的方法調用、返回值等。一個棧一般由三個部分組成:局部變量表、操作數和幀數據區。

6、本地方法棧

  任何本地方法接口都會使用某種本地方法棧。當線程調用Java方法時,虛擬機會創建一個新的棧幀並壓入Java棧。然而當它調用的是本地方法時,虛擬機會保持Java棧不變,不再在線程的Java棧中壓入新的幀,虛擬機只是簡單地動態連接並直接調用指定的本地方法。當地方法接口需要回調Java虛擬機中的Java方法,在這種情況下,該線程會保存本地方法棧的狀態並進入到另一個Java棧。

7、垃圾回收系統

  負責回收已經無用的對象的內存空間,從而避免內存滲漏體的產生,節省內存資源,避免程序代碼的崩潰。

8、PC寄存器

  每個線程啟動的時候,都會創建一個PC(Program Counter,程序計數器)寄存器。PC寄存器裏保存有當前正在執行的JVM指令的地址。 每一個線程都有它自己的PC寄存器,也是該線程啟動時創建的。保存下一條將要執行的指令地址的寄存器是 :PC寄存器。PC寄存器的內容總是指向下一條將被執行指令的地址,這裏的地址可以是一個本地指針,也可以是在方法區中相對應於該方法起始指令的偏移量。

9、執行引擎

  負責code的執行。

技術分享圖片

Java虛擬機之JVM系統和內存模型