Java中的四個核心技術思想

深刻了解底層的技術處理細節必不可少。   Java曾經成爲一個龐大而複雜的技術平臺, 對於開發人員而言, 要想更好的掌握Java技術, 有助於提高咱們對整個Java平臺的瞭解力。 這裏所介紹的是Java技術平臺的幾個核心概念,   Java虛擬機的次要任務是裝在class文件而且執行其中的字節碼。 Java虛擬機包含一個類裝載器, 它能夠從順序和API中裝載class文件。 字節碼由執行引擎來執行。   不一樣的Java虛擬機中, 另外一種執行引擎更快, 叫作即時編譯器(just-in-timecompiler)。 第一次被執行的字節碼會被編譯成本地機器代碼。 編譯出的本地機器代碼會被緩存, 當辦法之後被調用的時候能夠重用。 第三種執行引擎是自順應優化器。 在這種辦法裏, 虛擬機開始的時候解釋字節碼, 而且記載下運用最頻繁的代碼段。 順序運行的時候, 其餘的代碼因爲運用得不是很頻繁, 而只須要編譯10%~20%的對性能有影響的代碼。 Java順序通過調用本地辦法(nativemethod)和主機交互。 Java中有兩種辦法:Java辦法和本地辦法。 Java辦法是由Java言語編寫, 存儲在class文件中的。 c++或彙編言語)編寫的, 本地辦法保管在動態連接庫中, 格式是各個平臺專有的。 運行中Java順序調用本地辦法時, 虛擬機裝載包含這個本地辦法的動態庫, 並調用這個辦法。 本地辦法是聯絡Java順序和底層主機操做系統的鏈接辦法。   通過本地辦法, Java順序能夠直接訪問底層操做系統的資源。 一個本地辦法接口(JavaNativeInterface, JNI)-使得本地辦法能夠在特定主機系統的任何一個Java平臺實現上運行。   若是但願運用特定主機上的資源, 那麼能夠寫一個平臺相關的Java順序來調用本地辦法。 若是但願保證順序的平臺無關性, 那麼只能通過JavaAPI來訪問底層系統資源。 啓動類裝載器(這是系統中獨一的)是Java虛擬機實現的一局部。   Java運用順序可以在運行時安裝用戶定義的類裝載器, 這種類裝載器可以運用自定義的方式來裝載類。 例如, 從網絡下載class文件。 而用戶定義的類裝載器不是, 可以被編譯成class文件, 還可以像其它對象同樣實例化。 因此不用再編譯的時候就曉得運行中的Java運用順序中最終會加入的全部的類。 當它運行時, 運用順序可以處理它須要哪些額定的類, 可以決議是運用一個或是更多的用戶定義的類裝載器來裝載。 因此用任何在Java代碼中能夠表述的風格來進行類裝載。 能夠從某些數據庫中獲取??踔量梢遠???傘?看到它究竟是被啓動類裝載器仍是被用戶定義類裝載器裝載。 當被裝載的類引用了另一個類時, 例如, 它就會運用這個類裝載器裝載Volcano類運用的全部類。 通過這種辦法, 運行時的Java順序中的每個類裝載器都有本身的命名空間。   Java運用順序能夠建立多少個(或多少種)被不一樣的類裝載器裝載的類寄存在不一樣的命名空間中, 當編寫一個Java運用順序的時候, 從不一樣源文件裝載的類能夠分隔在不一樣的命名空間中。 通過這種辦法, 就可以運用Java類裝載器的體系構造來控制任何不一樣源文件中裝載的代碼之間的互相影響, 這個用戶定義的類裝載器一般被稱爲JavaApplet類裝載器, 它曉得如何向HTTP效勞器央求class文件。 只有當瀏覽器遇到有Javaapplet的頁面時, 才決議是否須要下載class文件。   Web瀏覽器啓動的Java運用順序一般爲每一個提供class文件的網絡地址分別建立不一樣的用戶定義類裝載器, 所以, 這就能夠把它們分別放置在Java主機運用順序的不一樣命名空間之下。 惡意的Javaapplet代碼就不會直接訪問從別的中央下載的class文件。 這就可以限制或阻止不一樣來源的代碼之間的互相訪問。 這種途徑途徑打破了C或者C++等言語所遵循的傳統, 運用這些傳統言語寫的順序一般首先被編譯, 而後被鏈接成獨自的、專門支持特定硬件平臺和操做系統的二進制文件。 一般情況下, 一個平臺上的二進制可執行文件不能在其餘平臺上工做。   當編譯和鏈接一個C++順序時, 所取得的可執行二進制文件只能在指定的硬件平臺和操做系統上運行, 而Java編譯器把Java源文件的指令翻譯成字節碼, 這種字節碼就是Java虛擬機的機器言語。   class文件設計得緊湊, 所以它們能夠快速地在網絡上傳送。 其次, 因爲Java順序是動態鏈接和動態擴展的, class文件能夠在須要的時候才下載。 從而能夠最大限度地減小終端用戶的等候時間。   JavaAPI通過支持平臺無關性和平安性, 使得Java順應於網絡運用。 它提供了一套訪問主機系統資源的規範辦法。 虛擬機裝載順序的class文件所運用的JavaAPIclass文件。 全部被裝載的class文件(包括從運用順序中和從JavaAPI中提取的)和全部曾經裝載的動態庫(包含本地辦法)共同組成了再Java虛擬機上運行的整個順序。   在一個平臺能偶支持Java順序之前, 必需在這個特定平臺上明白地實現API的功能。 爲訪問主機上的本地資源, 因爲JavaAPIclass文件調用了本地辦法, 對Java順序而言, 不管平臺外部如何, JavaAPI都會有一樣的表現和可預測的行爲。 正是因爲在每一個特定的主機平臺上明白地實現了Java虛擬機和JavaAPI, 所以,   JavaAPI在Java平安性模型方面也有貢獻。 都會通過查詢訪問控制器來檢驗是否獲得了受權。 訪問控制器是一個類, 該類用來執行棧檢驗, 已決議是否容許某種操做。c++

相關文章
相關標籤/搜索