讀書筆記之《深入JAVA虛擬機》-----(一)

最近花了點時間看了Bill Venners的《深入JAVA虛擬機》,這本書深入剖析了JAVA虛擬機規範,我自己則挑了一些原理性的章節來看,等過後有時間還要再好好通讀一遍。

 

第一章 JAVA體系結構

1.JAVA體系結構:JAVA語言+CLASS文件格式+JAVA API+JAVA虛擬機。

2.JNIJAVA本地接口。

3.類裝載器分爲啓動類裝載器和用戶定義類裝載器,同一個類裝載器裝載的類可以相互調用,不同類裝載器裝載的類無法直接訪問,有效控制惡意代碼。

4.JAVAàJAVA API---(左邊平臺無關,右邊平臺相關)-à本地方法—>主機操作系統。

5.JAVA在內存管理和線程管理的不確定性。

 

第三章 安全

1.沙箱:放置JAVA程序,並限制其活動。

2.沙箱發展:基本沙箱(1.0版)---代碼簽名和認證(1.1版)---細粒度訪問控制(1.21.2以上版)。

3.沙箱基本組件:類裝載器結構,CLASS文件檢驗器,內置於JAVA虛擬機的安全特性,安全管理器及JAVA API

4.第一道防線---類裝載器:

作用:防止惡意代碼干涉善意代碼,守護被信任類庫的邊界,將代碼歸入某域確定域內代碼可執行的操作。

裝載順序:採用雙親委派模型,即每個類裝載器裝載一個類時,總是先交給其雙親裝載器裝載,如果雙親無法裝載,則拋給其子裝載器裝載。這個模式同樣適用於多級親子結構的類裝載器。這樣的裝載模式防止了用戶自定義類裝載器裝載惡意的與JAVA核心類同名的類,因爲所有類裝載器的最終雙親都是啓動類裝載器,啓動類裝載器通過名字裝載的是JAVA核心類,不會裝載到同名的惡意代碼。並且不同類裝載器裝載的類之間是相互隔離的。

5.CLASS文件檢驗器:檢驗程序的健壯性,在執行前而不是執行時檢驗,包括4趟檢驗。

6.JAVA內置安全特性:

類型安全的引用轉換

結構化的內存訪問

自動垃圾回收

數組邊界檢查(防止數組越界)

空引用檢查(防止NULL指針)

異常的結構化處理

 

第五章 JAVA虛擬機

1.虛擬機運行的線程包括守護線程和非守護線程,其中守護線程包括垃圾回收線程等,非守護線程爲運行main()函數的線程及由main()創建的爲特別聲明的線程。當所有的非守護線程運行結束時,虛擬機自動終止守護線程並退出。

2.運行時數據區:方法區(線程共享),堆(線程共享),本地方法棧(線程共享),JAVA棧(線程獨立擁有),PC寄存器(線程獨立擁有)。

3.類裝載器執行過程:裝載à連接à初始化。

4.方法區:保存被裝在類型的信息,類型信息包括類全名,繼承的直接超類,繼承的直接接口,類/接口的標識,訪問修飾符,常量池,字段信息,方法信息,到CLASSLOADER的引用,到CLASS類的引用。

5.堆:保存類實例和數組,所有線程共享堆但都有自己的堆空間。

6.JAVA棧:以棧幀爲單位,執行方法時壓入棧,退出方法時彈出棧,棧幀保存了方法參數,局部變量和中間結果。

7.本地方法棧:獨立於JAVA棧,與本地方法有關,依賴於實現。

8執行引擎:指令集定義的,是一個線程。

9.指令集:

以棧爲中心而非以寄存器爲中心,保證了JAVA的平臺無關性

使得執行可優化

增強CLASS文件的緊湊性

CLASS文件需要字節碼驗證,如使用數據流分析器。

10.本地方法接口:增加JAVA可移植性,分離具體的支持JNI的虛擬機實現和具體的本地方法實現。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章