Posted on 2009-11-02 14:31
瘋狂 閱讀(226)
評論(0) 編輯 收藏 所屬分類:
java
當一個Java虛擬機運行一個程序時,他需要很多東西,例如字節碼,從已經裝在的class文件中得到的其他信息,程序創建時候的對象,傳遞給方法的參數,返回值,局部變量,以及運算的中間結果等等。
每個java虛擬機實例都有一個方法區和一個堆,他們是由該虛擬機實例中的所有線程共享的。
1, 當虛擬機裝載一個class文件時,他會從這個class文件包含的二進制數據中解析類型數信息然后放在方法區中,具體如下:
2, 當程序運行時,虛擬機會把所有該程序在運行時創建的對象都放在堆中。
3, 每當一個線程創建時,他都將得到他自己的PC寄存器以及一個java載,如果線程正在執行的是一個java方法(非本地方法),那么pc寄存器的值總是指向下一條將被執行的指令,而他的java載總是存儲方法調用的狀態-----包括他的局部變量,參數,返回值,以及中間的結果等等。而本地方法的狀態則是以某種依賴于具體實現的方式存儲在本地方法中,也可能是在寄存器或者其他某些與特定實現相關的內存區中.
1.1數據類型
類型分為兩種基本和引用類型.
Java語言中所有的基本類型也是虛擬機中的基本類型,特殊情況:boolean有點特別,當編譯器吧java源碼編譯成自己嘛事,他會以int或者byte來表示boolean.false是有整數零表示,所有非零整數用來表示true。boolean數組是當做byte數組來訪問的,在堆中,他也可以被表示為位域。
1.2
Java虛擬機中最基本的數據單元就是字,有設計者決定,字長至少是一個單元就持有byte,short,int,char,float,returnAddress(虛擬機內部使用)或者reference(引用類型),兩個字節就能夠持有long和double類型的值。由此虛擬機實現至少選擇32字長或者更高。通常那個根據底層主機的指針長度來選擇字長。
1,3 類裝載系統
Java有兩種類裝載系統:啟動類裝載器和用戶自定義裝載器。 每一個被裝載的類型,java虛擬機都會為他創建一個java.lang.class類的實例來代表該類型,用戶自定義的類裝載器和class實例都放在堆區,而裝載的類型信息都放在方法區。
類裝載的過程:裝載(查找并裝載類型的二進制信息,將類信息系放在放在方法區),連接(驗證,準備(為類變量分配內存,并將其初始化為默認值,解析(為類變量初始化正確的初始值))),在jdk1.1時:啟動類裝載器會首先在用戶配置的classpath下尋找.class文件,而1.2 搜索classpath的任務交給了系統類裝載器----自定義的類裝載器。