MDA/MDD/TDD/DDD/DDDDDDD
          posts - 536, comments - 111, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          公告

          一些零碎的筆記,希望能對你有用處。


          搜索

          •  

          積分與排名

          • 積分 - 598175
          • 排名 - 80

          最新評論

          深入java虛擬機筆記

          Posted on 2011-01-29 21:36 leekiang 閱讀(587) 評論(0)  編輯  收藏 所屬分類: java
          1,java體系結構包括四個獨立但相關的技術:java語言、class文件格式、java的api、java虛擬機
          2,java虛擬機是一臺抽象的計算機,主要任務是裝載class文件并且執(zhí)行其中的字節(jié)碼。不同的java虛擬機,其執(zhí)行引擎的實現(xiàn)可能不一樣。分為軟件實現(xiàn)和硬件實現(xiàn)(內嵌在芯片),軟件實現(xiàn)有以下幾種:(1)每次都會解釋字節(jié)碼(2)即時編譯,即編譯成本低機器代碼,緩存起來可以重用(3)自適應優(yōu)化器
          3,每一個類被裝載的時候,java虛擬機都監(jiān)視這個類,看它到底是被啟動(bootstrap)類裝載器還是被用戶定義類裝載器裝載。當被裝載的類引用了另外一個類時,虛擬機就會使用裝載第一個類的類裝載器裝載被引用的類。由于java虛擬機采用這種方式進行類的加載,所以被裝載的類默認情況下只能看到被同一個類裝載器裝載的類。通過這種方法,java的體系結構允許在一個java應用程序中建立多個命名空間。運行時的java程序中的每一個類裝載器都有它自己的命名空間。
          例子:瀏覽器上的java虛擬機為不同的網(wǎng)絡地址創(chuàng)建不同的用戶定義類裝載器,用來裝載不同來源的class文件,這種不同網(wǎng)址的applet就不會相互影響。
          問題:1)自己寫的類如果調用了java的api,那么類裝載器是一個什么樣的情況。同一個類可能被不同的類裝載器裝載?
          ????? 2)看一下tomcat的類裝載器的實現(xiàn)
          ?? ?? 3)java的虛擬機與ruby和python的有何區(qū)別?
          ?? ?? 4)有沒有一種打包工具,把java代碼打包成不需要java虛擬機的本地可執(zhí)行代碼
          ?? ?? 5)java的動態(tài)連接和動態(tài)擴展指的是什么?
          4,java語言的特殊之處是程序既被編譯又被解釋。首先,編譯器將程序編譯為一種稱之為java字節(jié)碼(bytecode)的與平臺無關的中間語言。解釋器分析并運行每條java字節(jié)碼指令。編譯只發(fā)生一次;而解釋在每次執(zhí)行程序時都會執(zhí)行(通常是如此,具體實現(xiàn)可能不一樣)。



          12,聲明一個對象時不會運行類的靜態(tài)區(qū)塊,在以下情況下會運行靜態(tài)區(qū)塊:
          ??? 1)new一個對象時;
          ??? 2)調用靜態(tài)方法時;
          ??? 3)Class.forName("類名")


          參考
          1,http://xyiyy.javaeye.com/blog/362092
          2,http://xyiyy.javaeye.com/blog/362107
          主站蜘蛛池模板: 海南省| 双江| 云浮市| 清河县| 兴仁县| 浮山县| 阿图什市| 嵩明县| 农安县| 清流县| 洛川县| 六盘水市| 仪征市| 漳浦县| 新化县| 娄底市| 漯河市| 广饶县| 惠安县| 土默特左旗| 谢通门县| 永德县| 宝丰县| 宁乡县| 辉南县| 石渠县| 昌乐县| 竹北市| 南丰县| 鄂伦春自治旗| 磐石市| 湘阴县| 麦盖提县| 高要市| 饶阳县| 镇赉县| 栾川县| 东阿县| 澄城县| 香格里拉县| 清河县|