Java虛擬機之JVM系統和內存模型
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系統和內存模型