1. 程式人生 > >class檔案的(解析)執行過程

class檔案的(解析)執行過程

(1)  jvm可以理解為一個由c++所編寫的記憶體容器:包含了載入器,編譯器等。當然了,我當時最困惑的就是class是怎麼被執行的

java中的物件模型:OOP-Klass模型

OOP:普通物件指標,

Kcass:java類在c++中的對等體

Kclass想jvm提供的功能:

實現語言層面的java類

實現java物件的派發

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

(2) 根據以上所述,是不是明白了些什麼呢,關於java的執行器:

對於任意一門語言,如果不能被編譯陳本機的可執行指令,則根本無法執行。眾所周知,java編譯器會將.java的檔案編譯成.class的檔案

而.class檔案在物理機上是無法執行的,所以才有了(1)中對等層的概念。

java的編譯器分為:模板解析器,c++編譯器       最終生產的都是機器碼(別懷疑,就是這麼做的)

還有一種最老的是位元組碼解析器---->為什麼現在不用了不知道原因的說

關於熱點程式碼的問題:在jvm執行期間,會將一些迴圈的程式碼,經常用到的程式碼標記為熱點----->那什麼是熱點呢,熱點是怎麼執行的呢

熱點程式碼,會被編譯成本地的機器碼。在執行期間,會有一個轉發表,而熱點程式碼相關的部分會與提前生成的機器碼相關聯----->提高執行速度

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

(3)java的整個執行流程:

.java--->.class--->類載入(aop[asm,gcb等],安全驗證[為什麼說java比較安全呢],連線[在解碼中的符號引用])---->生成對等體---->動態編譯---->執行

執行(方法去,堆,棧)。

         java的所有的一切都是在記憶體中進行的,這也是與c/c+不同的:對於c/c++等寫的程式,會直接編譯生成機器程式碼,而java的機器程式碼是動態生成的,換句話說

java將編譯的過程委託給了虛擬機器動態執行

(4) java的JNI

JNI即:java本地方法,在jvm想執行class中的方法是,是通過jni才jvm的記憶體中進行查詢,在執行。對於java中的方法,物件等概念,都統一理解為jvm的執行時資料就可以了。

(5)為什麼要分方法區,常量區,堆,棧呢

個人感覺 :程式就是資料結構+方法      在jvm的角度,這些都是給你的執行資源,進行GC等

以上是這些天的一些體會,如果有說的不對的地方,希望多多指正,留言,一起學習