jvm學習《inside in jvm》,深入java虛擬機

1.java的體系結構

  java虛擬機

  類裝載器的體系結構

  java class 問題就

  java API

  java程序設計語言

2.平臺無關性

 基於java平臺的版本

 如果使用了本地方法,這樣的話就跟平臺相關

 保證程序的最佳可移植性而採取的途徑:

a.選擇程序要運行的主機和設備的集合

b.在目標宿主機中選擇自認爲足夠好的java平臺版本,在改版本java平臺上編寫、運行程序

c.對每個目標宿主機,選擇一些程序將要運行的java平臺實現

d.編寫程序,使它只通過java API 的標準運行庫來訪問計算機(不要使用本地方法,或者開發商專有的那些調用本地的方法庫)

e.編寫程序,使它不依賴垃圾收集器及時終結的正確性,也不依賴線程的優先級

f.努力設計一個用戶界面,使它在你所有的目標宿主機上都能正常工作

g. 在所有的目標運行時的環境和所有的目標宿主機上測試程序

3.安全

 組成java沙箱的基本組件有:

a.類裝載器結構

b.class文件檢驗器

c.內置於java虛擬機的安全性

d.安全管理器及java API

用戶可以自定義沙箱

 

a.在java沙箱中,類裝載器體系結構是第一道防線,

類裝載器體系結構作用:放在惡意代碼去幹涉善意的代碼(通過由不同的類裝載器載入的類提供不同的命名空間實現的),守護了被信任的類庫的邊界(通過分別使用不同的類裝載器可靠的包和不可靠的包來實現,還可以通過簡單的拒絕裝載特定的禁止類型就可以了),將代碼歸入某類,該類確定了代碼可以進行的操作

b.class文件檢查器

 class文件檢查器保證裝載的class文件內容有正確的內容結構,並且這些class文件相互間協調一致

 class文件檢查器要進行四趟獨立的掃描來完成他的操作:第一趟:class文件的結構檢查,第二趟:類型數據的語義檢查,第三趟:字節碼驗證,第四趟:符號引用的驗證

c.內置於java虛擬機的安全性(類型轉換等)

d.安全管理器和java API

 abc起到一個共同的目的:保持java虛擬機的實例和它正在運行的應用程序的內部完整性,使得他們不被下載的惡意或有漏洞的代碼侵犯。安全管理器主要用於飽和虛擬機的外部資源不被虛擬機內運行的惡意或有害的代碼侵犯,定義了沙箱外部邊界可以被定製

 

4.網絡移動性

5.java虛擬機

   a.java虛擬機是什麼(抽象的規範,一個具體的實現,一個運行的虛擬機實例)

   b.java虛擬機的生命週期

       一個運行時的java虛擬機實例的天職就是:負責運行一個java程序。當啓動一個java程序時,一個虛擬機實例也就誕生了,當該程序關閉退出,這個虛擬機實例也就隨之消亡。如果在同一臺計算機上同時運行三個java程序,將得到三個java虛擬機實例。每個java程序都運行於自己的java虛擬機實例中。

       java虛擬機實例通過調用某個初始類的main()方法來運行一個java程序。而這個main()方法必須是共有的(public)、靜態的(static)、返回值爲void、並且接受一個字符串數組作爲參數。任何擁有這樣一個main()方法的類都可以作爲java程序運行的起點。

        java虛擬機內部有兩種線程:守護線程與非守護線程。守護線程通常是由虛擬機自己使用的,比如執行垃圾收集任務的線程。但是java程序也可以把它創建的任何線程標記爲守護線程,而java程序中的初始線程(main())是非守護線程。只要有任何非守護線程在運行,那麼這個java程序也在繼續運行,當該程序中的所有非守護線程都終止時,虛擬機實例將自動退出

 

c.java虛擬機的體系結構

一個虛擬機實例的行爲是分別按照子系統、內存區、數據類型及指令

 c.1 數據類型(基本類型和引用類型),基本類型的變量持有原始值(真正的原始數據),引用類型的變量持有引用值(“引用值指的是某個對象的引用,而不是該對象本身”)

c.2 字長的考量

c.3 類裝載子系統,java虛擬機有兩種類裝載器:啓動類裝載器和用戶自定義裝載器。類裝載器子系統任務:1裝載(查找並裝載類型的二進制數據),2連接(執行驗證(確保被導入類型的正確性),準備(爲類變量分配內存,並將其初始化爲默認值),解析(把類型中的符號引用轉換爲直接引用)),3初始化(吧類變量初始化爲正確初始值)。

c.4方法區 對每個裝載的類型,虛擬機都會在方法區中存儲以下類型的信息:這個類型的全限定名,這個類型的直接超類的全限定名(除非這個類型是java.lang.Object,他沒有超類),這個類型是類類型還是接口類型,這個類型的訪問修飾符,任何直接超接口的全限定名的有序列表。除了列出的基本類型信息外,虛擬機還得爲每個被裝載的類型存儲以下信息:該類型的常量池,字段信息,方法信息,除了常量以外的所有類變量,一個到類classloader的引用

常量池:虛擬機必須爲每個被裝載的類型維護一個常量池,常量池就是該類型所用常量的一個有序集合,包括直接常量(string,integer,floating point常量)和對其他類型、字段和方法的符號引用。池中的數據項就像數組一樣是通過引索訪問的,

字段信息:字段信息清單如下:字段名,字段類型,字段的修飾符

方法信息:方法名,返回類型,方法參數的數量和類型,方法的修飾符

類變量

 c.4

 c.5程序計數器

 c.6java棧

 

 

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