標籤:style blog http java color 使用
Java體系:
JDK(Java development Kit)包括:java程式設計語言,java虛擬機器,java API類庫。
Java技術體系:Java Card(Applets),Java ME(Micro Edition),Java SE(Standard Edition),Java EE(Enterprise Edition)。
Jvm結構概念:
運行時資料區域(Runtime Data Areas)
Jvm定義了一組運行時資料區域,這些地區在Jvm運行程式時使用。一些地區在JVM啟動的時候就被建立,在JVM關閉時銷毀。還有些地區是每個線程所有的。線程啟動時建立,線程結束時銷毀。
pc 寄存器(Program Counter Register)
JVM支援多線程,每個線程都有自己的pc寄存器。如果線程正在執行的是一個Java方法,這個計數器記錄的是正在執行的虛擬機器位元組碼指令的地址,如果是native的,這個計數器值則為空白(Undefined)。
Jvm棧
虛擬機器棧描述的是Java方法執行的記憶體模型:每個方法被執行的時候都會同時建立一個棧幀(Stack Frame)用於儲存局部變數表,操作棧,動態連結,方法出口等資訊。每一個方法被調用直至執行完成的過程,就對應著一個棧幀在虛擬機器棧中從入棧道出棧的過程。棧的局部變數主要存放一些基本類型的變數(int,short, long, byte, float, double, boolean, char),物件控點(reference類型)和returnAddress類型。
本地方法棧(Native Method Stacks)
本地方法棧於虛擬機器棧所發揮的作用非常相似,區別是虛擬機器棧為虛擬機器執行Java方法服務,本地方法棧則是為虛擬機器使用到的Native方法服務。
Java堆(Heap)
Jvm有一個堆,所有Jvm中的線程共用這個堆。所有的類對象執行個體和數組都分配在堆上。Jvm堆在Jvm啟動的時候被建立。Jvm提供一個垃圾收集者來管理堆。堆上的對象不需要程式員顯式地銷毀。堆可以是固定大小,也可以根據需要增加大小。堆可以是不連續的。
方法地區(Method Area)
所有Jvm中的線程共用這個地區,它用於儲存已被虛擬機器載入的類資訊,常量,靜態變數,即使編譯器編譯後的代碼等資料。
運行時常量池(Runtime Constant Pool)
運行時常量池是方法區的一部分。Class檔案中除了有類的版本,欄位,方法,介面等描述資訊外,還有一項資訊是常量池,用於存放編譯期產生的各種字面量和符號引用,這部分內容將在類載入後存放到方法區的運行時常量池。
Jvm結構說明:
1.每個Java虛擬機器執行個體都有一個方法區以及一個堆,它們是由該虛擬機器執行個體中所有線程共用的。
2.每個線程被建立時,都將得到自己的PC寄存器以及一個Java棧。任何線程都不能訪問另一個線程的PC寄存器或者Java棧。
3.資料類型:基本類型和參考型別:
4.方法區:
1)對方法區資料的訪問是安全執行緒的。
2)方法區的大小不必是固定的,虛擬機器可以根據應用的需要動態調整。方法區也不必是連續的,方法區可以在一個堆(甚至是虛擬機器自己的堆)中自由分配。虛擬機器允許使用者或者程式員指定方法區的初始大小以及最小和最大尺寸等。
3)方法區也可以被記憶體回收。
4)方法區中儲存的資訊:
- 這個類型的全限定名。
- 這個類型的直接超類的全限定名(除非這個類是java.lang.Object,它沒有超類)
- 這個類型是類類型還是介面類型。
- 這個類型的存取修飾詞(public,abstract或final的某個子集)
- 任何直接超介面的全限定名的有序列表。
- 該類型的常量池。
- 欄位資訊。
- 方法資訊。
- 除了常量以外的所有類(靜態)變數。
- 一個到類ClassLoader的引用。
- 一個到Class類的引用。
5.執行引擎
1)運行中Java程式的每一個線程都是一個獨立的虛擬機器執行引擎的執行個體。
2)JVM的指令集以棧為中心,而非以寄存器為中心,使得在那些只有很少的寄存器,或者寄存器很沒有規律的機器上實現Java更便利。
PS:
1.Class類使得運行程式可以存取方法區中儲存的資訊(及反射的原理)。
2.數組是真正的對象,和其他對象一樣,數組總是儲存在堆中。
參考資料:
《深入理解java虛擬機器》
《深入Java虛擬機器》
轉自:http://blog.csdn.net/thomescai