1. 程式人生 > >java虛擬機器(JVM)

java虛擬機器(JVM)

1.jvm虛擬機器概述和基本概念  (虛擬機器分為系統虛擬機器-》(VirtualBox   VMware ==)  和 程式虛擬機器-》(JVM  DVM == )   )

   1.1什麼是jvm   

       JVM的中文名稱叫Java虛擬機器,它是由軟體技術模擬出計算機執行的一個虛擬的計算機。

       JVM也充當著一個翻譯官的角色,我們編寫出的Java程式,是不能夠被作業系統所直接識別的,這時候JVM的作用就體現出來了,它負責把我們的程式翻譯給系統“聽”,告訴它我們的程式需要做什麼操作。

       我們都知道Java的程式需要經過編譯後,產生.Class檔案,JVM才能識別並執行它,JVM針對每個作業系統開發其對應的直譯器,所以只要其作業系統有對應版本的JVM,那麼這份Java編譯後的程式碼就能夠執行起來,這就是Java能一次編譯,到處執行的原因。

2.jvm虛擬機器的基本結構

(1.類載入子系統(類載入器)  2.方法區  3.java堆  4.直接記憶體  5.java棧  6.本地方法棧  7.垃圾回收器  8.pc暫存器  9.執行引擎)

  1.類載入子系統(類載入器)

    負責載入檔案系統或者網路中載入class資訊,載入的資訊統一放在叫方法區的記憶體空間

   2.方法區  

    存放類資訊,常量資訊,常量池資訊,包括字串和數字常量等。

   3.java堆

    3.1在java虛擬機器啟動的時候建立java堆,它是java程式最主要的記憶體工作區域,幾乎所有的物件的例項都存放在java堆中,堆空間是所有執行緒共享的。

    3.2java堆是和java應用程式關係最密切的記憶體空間,幾乎所有物件都存放在其中,並且java堆完全是自動化管理的,通過垃圾回收機制,垃圾物件會自動清理,不需要顯示的釋放。根據垃圾回收機制的不同,java堆有可能擁有不同的結構,最為常見的就是將整個java堆分為新生代和老年代。其中新生代存放新生的物件或者年齡不大的物件。老年代存放老年物件。

    

    3.2.1 新生代:eden區  s0區(form區)   s1區(to區)   s0和s1大小相等,可以相互轉換角色

    垃圾回收的 複製演算法:GC來回收垃圾的時候 回去s0和s1其中一塊區域回收   比如GC找到s0回收垃圾  若發現s0區還有 沒有釋放引用的物件  則會吧這些正在使用的物件複製到s1區  其餘物件全部回收。

  -------》GC每次回收  則物件成長一歲  到達一定的歲數  上升為老年代

 

   4.直接記憶體  

    java的NIO庫允許java程式使用直接記憶體,從而提高效能,通常直接記憶體的速度會優於java堆。讀寫頻繁的場合可能會考慮使用。

  5.java棧

    5.1每個虛擬機器執行緒都有一個私有的棧,一個執行緒的java棧的執行緒建立的時候被建立,java棧中儲存著區域性變數,方法引數,同時java的方法呼叫,返回值等

   6.本地方法棧  (本地方法:就是java程式呼叫非java程式碼的介面。使用本地方法開銷很大,儘量避免呼叫本地方法)

    本地方法棧和java棧非常相似,最大不同為本地方法棧用於本地方法呼叫。java虛擬機器允許java直接呼叫java本地方法(通常使用c編寫)

   7.垃圾回收器

    垃圾收集是java系統的核心,也是必不可少的,java有一套自己進行垃圾清理的機制,開發人員無需手工清理。

 

   8.pc暫存器  

    pc暫存器也是每個執行緒私有的空間,java虛擬機器會為每個執行緒建立pc暫存器,在任意時刻,一個java執行緒總是在執行一個方法,這個方法被稱為當前方法,如果當前方法不是本地方法,pc暫存器就會執行當前正在被執行的指令,如果是本地方法,則pc暫存器值為undefined,暫存器存放如當前執行環境指標,程式計數器,操作棧指標,計算的變數指標等資訊。

   9.執行引擎

    虛擬機器最核心的元件就是執行引擎,它負責執行虛擬機器的位元組碼,一般使用者先進行編譯成機器碼後執行。

3.堆,棧,方法區概念和聯絡

   1.堆解決的是資料儲存的問題,即資料怎麼放,放在哪兒。

   2.棧解決程式的執行問題。即程式如何執行,或者說如何處理資料。

   3.方法區則是輔助堆疊的塊永久區(Perm),解決堆疊資訊的產生,是先決條件。