1. 程式人生 > >什麼是Java虛擬機器?說到虛擬機器,又想到西遊記也是個虛擬故事...文體兩開花...多多關注

什麼是Java虛擬機器?說到虛擬機器,又想到西遊記也是個虛擬故事...文體兩開花...多多關注

        Java虛擬機器(Java Virtual Machine)是java的核心和基礎,是處於java編譯器和os平臺之間的虛擬處理器。它是一種利用軟體方法實現的抽象的計算機基於下層的作業系統和硬體平臺,是一個可以執行Java位元組碼的虛擬機器程序。

        要知道Java被稱為跨平臺的語言,其中核心就在於Java虛擬機器,Java是解釋型語言,不能被計算機直接理解,需要通過Javac編譯器編譯成二進位制的.class位元組碼檔案,再通過jvm當中的java直譯器將.class檔案解釋成對應平臺的機器碼執行,也就是說靠Java虛擬機器來實現Java的跨平臺功能。

      Java虛擬機器的記憶體

        Java虛擬機器記憶體主要包括五個部分:

        1.程式計數器

        程式計數器(又稱PC暫存器)是用於儲存每個執行緒下一步將執行的JVM指令,如該方法為native的,則PC暫存器中不儲存任何資訊,每個執行緒都有自己獨立的程式計數器。是Java記憶體中讀取最快的部分,也是唯一一個在Java虛擬機器規範中沒有規定任何OutOfMemoryError情況的區域。

        2.Java虛擬機器棧

        JVM棧是執行緒私有的,每個執行緒建立的同時都會建立JVM棧,每個方法被執行時都會同時建立一個棧幀(Stack Frame)用於儲存區域性變量表、操作棧、動態連結、方法出口等資訊。

        3.Java堆

        堆是JVM用來儲存物件例項以及陣列值的區域,是JVM中記憶體中最大的一塊,可以認為Java中所有通過new建立的物件的記憶體都在此分配,Heap中的物件的記憶體需要等待GC進行回收。 堆是JVM中所有執行緒共享的。

        4.方法區域

        方法區域存放了所載入的類的資訊(名稱、修飾符等)、類中的靜態變數、類中定義為final型別的常量、類中的Field資訊、類中的方法資訊,當開發人員在程式中通過Class物件中的getName、isInterface等方法來獲取資訊時,這些資料都來源於方法區域,同時方法區域也是全域性共享的,在一定的條件下它也會被GC,當方法區域需要使用的記憶體超過其允許的大小時,會丟擲OutOfMemory的錯誤資訊。

        5.執行時常量池

        存放的為類中的固定的常量資訊、方法和Field的引用資訊等,其空間從方法區域中分配。