java虛擬機中的基本結構

16865f32-a87b-4fee-9aed-a793016cf2a7

  •     加載子系統負責從文件系統或者網絡中加載Class信息,加載的類信息存放於一塊稱爲方法區的內存空間。除了類的信息外,方法去中還可能存放運行時常量池信息,包括字符串字面量和數字常量(這部分常量信息是Class文件中常量池部分的內存映射)
  • java堆在虛擬機啓動的時候建立,它是java程序最主要的內存工作區域。幾乎所有的java對象實例都存放於java堆中。堆空間是所有線程共享的,這是一塊與java應用密切相關的內存空間。

  • java的NIO庫允許java程序使用直接內存。直接內存是在java堆外的,直接向系統申請的內存空間。通常,訪問直接內存的速度會優於java堆。因此出於性能考慮,讀寫頻繁的場合可能會考慮使用直接內存。由於直接內存在java堆外,因此它的大小不會直接受限於Xmx指定的最大堆大小,但是系統內存是有限的,java堆和直接內存的總和依然受限於操作系統能給出的最大內存
  • 垃圾回收系統是java虛擬中的重要組成部分,垃圾回收期可以堆方法區,java堆和直接內存進行回收。

  • 每一個java虛擬機線程都有一個私有的java棧。一個線程的java棧在線程創建的時候被創建。java棧中保存着幀信息,局部變量,方法參數,同時和java方法的調用,返回密切相關。
  • 本地方法棧和java棧非常類似,最大的不同在於java棧用於java方法的調用,而本地方法棧則用於本地方法的調用。作爲堆java虛擬機的擴展,java虛擬機允許java直接調用本地方法(通常使用C編寫)

  • PC(Program Counter)寄存器也是每個線程私有的空間,java虛擬機會爲每一個java線程創建PC寄存器。在任意時刻,一個java線程總是在執行一個方法,這個正在被執行的方法被稱爲當前方法。如果當前方法不是本地方法,PC寄存器就會指向當前正在被執行的指令,如果當前方法是本地方法,那麼PC寄存器的值就是undefined
  • 執行引擎是java虛擬機中的最核心組件之一,它負責執行虛擬機的字節碼。現代虛擬機爲了提高執行效率,會使用即使編譯技術將方法編譯成機器碼後執行 

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