瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Java虛擬機 體系結(jié)構(gòu)

          Posted on 2009-11-02 14:31 瘋狂 閱讀(231) 評論(0)  編輯  收藏 所屬分類: java

          當一個Java虛擬機運行一個程序時,他需要很多東西,例如字節(jié)碼,從已經(jīng)裝在的class文件中得到的其他信息,程序創(chuàng)建時候的對象,傳遞給方法的參數(shù),返回值,局部變量,以及運算的中間結(jié)果等等。

            每個java虛擬機實例都有一個方法區(qū)和一個堆,他們是由該虛擬機實例中的所有線程共享的。

          1,  當虛擬機裝載一個class文件時,他會從這個class文件包含的二進制數(shù)據(jù)中解析類型數(shù)信息然后放在方法區(qū)中,具體如下:

          2,  當程序運行時,虛擬機會把所有該程序在運行時創(chuàng)建的對象都放在堆中。

          3,  每當一個線程創(chuàng)建時,他都將得到他自己的PC寄存器以及一個java載,如果線程正在執(zhí)行的是一個java方法(非本地方法),那么pc寄存器的值總是指向下一條將被執(zhí)行的指令,而他的java載總是存儲方法調(diào)用的狀態(tài)-----包括他的局部變量,參數(shù),返回值,以及中間的結(jié)果等等。而本地方法的狀態(tài)則是以某種依賴于具體實現(xiàn)的方式存儲在本地方法中,也可能是在寄存器或者其他某些與特定實現(xiàn)相關的內(nèi)存區(qū)中.

          1.1數(shù)據(jù)類型

           類型分為兩種基本和引用類型.

          Java語言中所有的基本類型也是虛擬機中的基本類型,特殊情況:boolean有點特別,當編譯器吧java源碼編譯成自己嘛事,他會以int或者byte來表示boolean.false是有整數(shù)零表示,所有非零整數(shù)用來表示trueboolean數(shù)組是當做byte數(shù)組來訪問的,在堆中,他也可以被表示為位域。

          1.2

            Java虛擬機中最基本的數(shù)據(jù)單元就是字,有設計者決定,字長至少是一個單元就持有byteshortintcharfloat,returnAddress(虛擬機內(nèi)部使用)或者reference(引用類型),兩個字節(jié)就能夠持有longdouble類型的值。由此虛擬機實現(xiàn)至少選擇32字長或者更高。通常那個根據(jù)底層主機的指針長度來選擇字長。

          1,3 類裝載系統(tǒng)

           Java有兩種類裝載系統(tǒng):啟動類裝載器和用戶自定義裝載器。 每一個被裝載的類型,java虛擬機都會為他創(chuàng)建一個java.lang.class類的實例來代表該類型,用戶自定義的類裝載器和class實例都放在堆區(qū),而裝載的類型信息都放在方法區(qū)。

            類裝載的過程:裝載(查找并裝載類型的二進制信息,將類信息系放在放在方法區(qū)),連接(驗證,準備(為類變量分配內(nèi)存,并將其初始化為默認值,解析(為類變量初始化正確的初始值))),在jdk1.1時:啟動類裝載器會首先在用戶配置的classpath下尋找.class文件,而1.2 搜索classpath的任務交給了系統(tǒng)類裝載器----自定義的類裝載器。


          主站蜘蛛池模板: 金阳县| 莲花县| 观塘区| 金湖县| 东至县| 兴宁市| 平遥县| 田东县| 大理市| 长治市| 瑞安市| 岢岚县| 万荣县| 栾城县| 东阳市| 兰溪市| 如皋市| 皮山县| 新竹县| 青海省| 九龙县| 邵东县| 哈尔滨市| 辛集市| 南溪县| 庆元县| 拜城县| 启东市| 宜川县| 南通市| 汝城县| 平泉县| 罗田县| 阜康市| 明溪县| 昌乐县| 江陵县| 嘉祥县| 平武县| 宜良县| 从江县|