mvc 架構(gòu)

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            74 Posts :: 60 Stories :: 5 Comments :: 0 Trackbacks
          posted on 2007-12-08 18:54 e全 閱讀(182) 評論(0)  編輯  收藏

          Java虛擬機之所以稱為“虛擬”,就是因為它僅僅是由一個規(guī)范來定義的抽象計算機。要運行某個Java程序,首先需要一個符合該規(guī)范的具體實現(xiàn)。下面主要討論這個規(guī)范本身。

          Java虛擬機是什么
          ???要理解Java虛擬機,你必須意識到,當你說“Java虛擬機”時,可能指的是如下三種不同的東西:

          • 抽象規(guī)范?
          • 一個具體的實現(xiàn)?
          • 一個運行中的虛擬機實例

          Java虛擬機抽象規(guī)范僅僅是個概念。該規(guī)范的具體實現(xiàn),可能來自多個提供商,并存在多個平臺上。它或者完全用軟件實現(xiàn),或者以硬件和軟件相結(jié)合的方式來實現(xiàn)。當運行一個Java程序的同時,也就在運行了一個Java虛擬機實例。

          Java虛擬機的生命周期
          ?? 一個運行時的Java虛擬機實例的天職就是:負責(zé)運行一個Java程序。當啟動一個Java程序時,一個虛擬機實例也就誕生了。當該程序關(guān)閉推出,這個虛擬機實例也就隨之消亡。每個Java程序都運行在于自己的Java虛擬機實例中。Java虛擬機實例通過調(diào)用某個初始類的main()方法來運行一個Java程序。而這個main()方法必須是public,static,返回值為void。main()方法作為該程序初始線程的起點,任何其他的線程都是由這個初始線程啟動的。
          ?? Java虛擬機內(nèi)部有兩種線程:守護線程和非守護線程。守護線程通常由虛擬機自己使用的,比如執(zhí)行垃圾收集任務(wù)的線程。但是,Java程序也可以把它的創(chuàng)建的任何線程標記為守護線程。而Java程序中的初始線程,就是開始于main()的那個,是非守護線程。只要有非守護線程在運行,那么這個Java程序也在繼續(xù)運行,只有該程序中所有的非守護線程都終止時,虛擬機實例將自動退出。

          Java虛擬機的體系結(jié)構(gòu)
          ??Java虛擬機的結(jié)構(gòu)分為:類裝載子系統(tǒng),運行時數(shù)據(jù)區(qū),執(zhí)行引擎,本地方法接口。其中運行時數(shù)據(jù)區(qū)又分為:方法區(qū),堆,Java棧,PC寄存器,本地方法棧。

          類裝載子系統(tǒng)
          ??Java虛擬機中,負責(zé)查找并裝載類型的那部分稱為類裝載子系統(tǒng)。
          ??Java虛擬機有兩種類裝載器:啟動類裝載器和用戶自定義類裝載器。啟動類裝載器是Java虛擬機實現(xiàn)的一部分。用戶自定義類裝載器是Java程序的一部分。
          ??類裝載器的動作:

          1. 裝載---查找并裝載類型的二進制數(shù)據(jù)
          2. 連接---執(zhí)行驗證,準備,以及解析(可選)
            驗證:確保被導(dǎo)入類型的正確性
            準備:為類變量分配內(nèi)存,并將其初始化為默認值
            把類型中的符號引用換為直接引用
          3. 初始化---把類變量初始化為正確的初始值

          方法區(qū)
          ??在Java虛擬機中,被裝載類型的信息存儲在一個邏輯上被稱為方法區(qū)的內(nèi)存中。當虛擬機裝載某個類型時,它使用類裝載器定位相應(yīng)的class文件,然后讀入這個class文件,然后將它傳輸?shù)教摂M機中,緊接著虛擬機提取其中的類型信息,并將這些信息存儲到方法區(qū)。該類型中的類(靜態(tài))變量同樣也是存儲在方法區(qū)中。方法區(qū)的大小不必固定,可以根據(jù)需要動態(tài)調(diào)整。方法區(qū)也可以被垃圾收集,因為虛擬機允許通過用戶定義的類裝載器來動態(tài)擴展Java程序,因此,一些類也會成為“不再引用”的類。?
          ??對于每個裝載的類型,虛擬機都會在方法區(qū)中存儲以下類型信息:

          • 這個類型的全限定名。
          • 這個類型的直接超類的全限定名(除非是java.lang.Object,無超類)
          • 這個類型是類類型還是接口類型。
          • 這個類型的訪問修飾符(public,abstract ...)
          • 任何直接超接口的全限定名的有序列表

          除了上面列出的基本類型信息外,虛擬機還為每個被裝載的類型存儲以下信息

          • 該類型的常量池
          • 字段信息
          • 方法信息
          • 除了常量以外所有類(靜態(tài))變量
          • 一個到類ClassLoader的引用
          • 一個到Class類的引用


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 炎陵县| 汝州市| 沂南县| 玛曲县| 内乡县| 洛扎县| 肃北| 柳河县| 田林县| 东莞市| 石楼县| 赣榆县| 常熟市| 瑞金市| 铜陵市| 虹口区| 宕昌县| 美姑县| 清远市| 柳河县| 靖州| 长沙市| 大石桥市| 呼图壁县| 西安市| 上高县| 纳雍县| 芜湖市| 广南县| 新沂市| 监利县| 镇坪县| 南宁市| 叶城县| 广宗县| 嘉荫县| 海宁市| 清水河县| 木兰县| 金坛市| 博野县|