java堆中的组成部分,初识Java虚拟机的基本结构 | If Coding
Java虛擬機是什么?是做什么的?可能這些問題在我們學習Java之初就伴隨這我們。
一般來說我們使用IDE將我們編寫好的Java程序,點擊運行,在不出錯的情況下,就會得到我們想要的結果。那么這期間到底發生了什么?先看下圖:
知道的是Java程序通過編譯器編譯成class文件,那么后面到底發生了什么,就是Java虛擬機的工作?,F在我們先要認識Java虛擬機的基本結構。
類加載子系統
類加載子系統負責從文件系統或者網絡中加載class信息,加載的類信息存放在方法區的內存空間。
方法區存放的內容:
類信息
運行時常量池信息(class文件中常量池部分的內存映射)
字符串字面量
數字常量
Java堆(共享)
Java堆在虛擬機啟動的時候建立,它是Java程序最主要的內存工作區域。幾乎所有的Java對象實例都存放在Java堆中。
Java虛擬機規范規定:
Java堆處于物理上不連續的內存空間
Java堆處于邏輯上連續的內存空間
異常:
OutOfMemoryError。
直接內存(不是虛擬機運行時數據部分,也不是Java虛擬機規范中定義的內存區域)
Java的NIO庫允許Java程序使用直接內存。直接內存在Java堆外的、直接向系統申請的內存區間。
優點:
速度優于Java堆
情景:
出于性能考慮,讀寫頻繁的場合會考慮使用直接內存。
異常:
OutOfMemoryError。(Java堆和直接內存依然受限于操作系統能給出的內存。)
垃圾回收系統
垃圾回收系統是Java虛擬機的重要組成部分,垃圾回收器可以對方法區、Java堆和直接內存進行回收。其中Java堆是垃圾收集器的工作重點。
Java和c/c++不同:
Java中的對象空間釋放是隱式的。
c/c++中使用free()或者delete()來釋放指定的內存區域。
Java棧(私有)
每一個Java虛擬機線程都有一個私有的Java棧。一個線程的Java棧在線程創建的時候被創建。Java棧中保存著幀信息。
后面會對Java棧的結構進行詳細介紹。
異常:
StackOverflowError
OutOfMemoryError
本地方法棧
與Java棧非常類似。
不同點:調用的方法是本地方法(通常使用c編寫)。
異常:
StackOverflowError
OutOfMemoryError
PC程序計數器(私有)
PC寄存器也是每個線程私有的空間,Java虛擬機會為每一個Java線程創建PC寄存器。在任意時刻,一個Java線程總是執行一個方法,這個正在被執行的方法成為當前方法。
PC寄存器的值:
當前方法不是本地方法(Java方法),PC寄存器只想當前正在被執行的指令。
當前方法是本地方法,那么PC寄存器的值就是underfined。
執行引擎
執行引擎是Java虛擬機的最核心組件之一,它負責執行虛擬機的字節碼?,F在虛擬機為了提高效率,會使用即時編譯技術將方法編譯成機器碼后再執行。
最后,看一下Java虛擬機運行時數據區,注意與Java虛擬機的基本結構的區別:
總結
以上是生活随笔為你收集整理的java堆中的组成部分,初识Java虚拟机的基本结构 | If Coding的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php ajax 注册,非常实用的aja
- 下一篇: matlab 十六进制数组,【MATLA