Java的體系結(jié)構(gòu):Java程序設(shè)計語言诗赌,Java class文件格式,Java應(yīng)用編程接口,Java虛擬機(jī)悬包。
Java虛擬機(jī)的主要任務(wù)是裝載class文件并且執(zhí)行其中的字節(jié)碼。Java虛擬機(jī)包含一個類裝載器(class loader)馍乙,它可以從程序和API中裝載class文件布近。Java API中只有程序執(zhí)行時需要的那些類才會被裝載垫释。字節(jié)碼由執(zhí)行引擎來執(zhí)行。
字節(jié)碼執(zhí)行有3中方式撑瞧,一次性解釋字節(jié)碼棵譬,即時編譯器(just-in-time compiler),這種情況下预伺,第一次被執(zhí)行的字節(jié)碼會被編譯成本地機(jī)器代碼订咸,編譯出的本地機(jī)器代碼會被緩存,當(dāng)方法以后被調(diào)用的時候可以重用酬诀,第三種是自適應(yīng)優(yōu)化器脏嚷,這種方法里,虛擬機(jī)開始的時候解釋字節(jié)碼瞒御,但是會監(jiān)視運(yùn)行中沖虛的活動然眼,并且記錄下使用最頻繁的代碼段。
Java有兩種方法:Java方法和本地方法葵腹。Java方法是由Java語言編寫高每,編譯成字節(jié)碼,存儲在class文件中的践宴。本地方法是由其他語言編寫的鲸匿,編譯成和處理器相關(guān)的機(jī)器代碼。本地方法保存在動態(tài)連接庫中阻肩,格式是各個平臺專有的带欢。
當(dāng)被裝載的類應(yīng)用了另外一個類時,虛擬機(jī)就會使用裝載第一個類的類裝載器裝載被引用的類烤惊。由于這種加載方式乔煞,被裝載的類在默認(rèn)情況下只能看到被同一個類裝載器裝載的別的類。Java的體系結(jié)構(gòu)允許在一個Java應(yīng)用程序中建立多個命名空間柒室。運(yùn)行時的Java程序的每一個類裝載器都有它自己的命名空間渡贾。從不同源文件裝載的類可以分割在不同的命名空間中,這樣就能夠使用Java類裝載器的體系結(jié)構(gòu)來控制任何從不同源文件中裝載的代碼之間的相互影響雄右,特別是能夠阻止惡意代碼獲取訪問和破壞善意代碼的權(quán)限空骚。
Java比C++的優(yōu)點(diǎn):Java的垃圾回收機(jī)制不需要或者不能直接操作內(nèi)存,使得Java不必在程序復(fù)雜之時考慮哪些對象內(nèi)存需要釋放擂仍,數(shù)組邊界檢查和空值對象引用檢查囤屹,提升了效率。