jdk包結構及用途分析


Table of Contents

概述

jdk包總覽

rt.jar包結構分析


概述

jdk是每一個使用java的人員每一天都在使用的東西,博主也已經研究了jdk源代碼中的一些類了,本篇博客是想從jdk包結構的角度去拆分jdk的源代碼包,以提供從設計角度的一個理解。

本篇博客基於jdk1.8

jdk包總覽

jdk的包如下圖所示:

該圖是直接從jdk的包目錄截取出來的圖,我們常常打交道的java源代碼都位於rt.jar這個包下面, 對java有一定使用經驗的讀者應該對此包都有印象。我們想着重分析的包也是rt.jar這個包。

在此之前,其他這么多的jar包是拿來干什么的呢?它們各自發揮的作用大致如下:

access-bridge-64.jar

 Java Accessibility API是Java Accessibility Utilities的一部分,它是一組實用程序類,可幫助輔助技術提供對實現Java Accessibility API的GUI工具包的訪問。

charsets.jar

Java 字符集,包含 Java 所有支持字符的字符集

cldrdata.jar

Unicode CLDR為軟件提供了支持世界語言的關鍵構建塊,提供了最大和最廣泛的語言環境數據庫。 這些數據被廣泛的公司用於其軟件國際化和本地化,使軟件適應不同語言的慣例以用於此類常見軟件任務.

deploy.jar

Java安裝目錄的常見部分 - 該文件運行某些產品的安裝。 正確設置Java路徑后,用戶可以執行此文件(只需雙擊它或按文件上的Enter鍵),要部署的應用程序將運行其安裝程序。 例如。 諾基亞OVI套件通常使用這種部署形式。 作為彼此的JAVA包,如果您將其重命名為ZIP並打開內容,則可以檢查包中的類。

dnsns.jar

即DNS naming service ,提供DNS地址服務的包,里面只有2個方法 getHostByAddr和 lookupAllHostAddr

jaccess.jar

定義Assistive Technologies.AWT(Abstract Window Toolkit)使用的JDK實用程序類

javaws.jar

JNLP(Java Network Launching Protocol )是java提供的一種可以通過瀏覽器直接執行java應用程序的途徑。

jce.jar

java類庫是java發布之初就確定了的基礎庫, 而javax類庫則是在上面增加的一層東西,就是為了保持版本兼容要保存原來的,但有些東西有了更好的解決方案, 所以,就加上些,典型的就是awt(Abstract Windowing ToolKit) 和swing。) 這個包都是加密相關的。

jfr.jar

和 jdk\bin\jmc.exe有關系。Java Mission Control 包括 JMX 控制台和 Java 飛行記錄器。 Java 飛行記錄器 (JFR) 是一個用於收集有關正在運行的 Java 應用程序的診斷數據和概要分析數據的工具。它集成到 Java 虛擬機 (JVM) 中, 幾乎不會帶來性能開銷,因此甚至可以在高負載生產環境中使用。使用默認設置時,內部測試和客戶反饋表明性能影響低於 1%。 對於一些應用程序,這一數字會大幅降低。但是,對於短時間運行的應用程序 (不是在生產環境中運行的應用程序類型), 相對的啟動和預熱時間可能會較長,這對性能的影響可能會超過 1%。JFR 收集有關 JVM 及其上運行的 Java 應用程序的數據。

jfxrt.jar

JDK有個 rt.jar ,是存儲JAVA語言核心類的的。這個jfxrt.jar就相當於JavaFX的rt.jar. JavaFX是一組圖形和媒體包,使開發人員能夠設計,創建,測試,調試和部署在不同平台上一致運行的富客戶端應用程序。在jdk最新的發版當中,javafx的包已經被移除了。

jfxswt.jar

也是和JavaFx相關,為JavaFx和Swing提供一些兼容性操作。

jsse.jar

SSL連接,驗證的包,

localedata.jar

日期顯示國際化的包,里面包含各地區的日期文字。

management-agent.jar

里面只有一個文本文件。

nashorn.jar

包括

1.動態鏈接.包含用於鏈接調用的動態調用站點的接口和類。 dynalink與java.lang.invoke包密切相關,並且依賴於該包。 雖然java.lang.invoke為invoke dynamic調用站點的動態鏈接提供了一個低級別的API,但它不提供一種方法來表示對象的更高級別操作,也不提供實現這些操作的方法。 如果一種語言是靜態類型的,並且它的類型系統與JVM的類型系統匹配,那么它可以使用通常的調用、字段訪問等指令(例如invokevirtual、getfield)來實現這一點。 但是,如果語言是動態的(因此,某些表達式的類型直到在運行時進行計算時才知道),或者其對象模型或類型系統與JVM的對象模型或類型系統不匹配, 那么它應該使用invokedynamic調用站點,並讓dynalink管理它們。

2.Javascript引擎 從 JDK 8 開始,Nashorn取代 Rhino 成為 Java 的嵌入式 JavaScript 引擎。Nashorn 完全支持ECMAScript 5.1 規范以及一些擴展。該特性允許開發人員將 JavaScript 代碼嵌入到 Java 中,甚至從嵌入的 JavaScript 中調用 Java。此外, 它還提供了使用jrunscript從命令行運行 JavaScript 的能力。

plugin.jar

功能很龐大的一個包。

resources.jar

提示信息顯示國際化的包,里面各地區的文字,圖片等。

rt.jar

java核心源代碼包

sunec.jar ,sunjce_provider.jar,sunmscapi.jar,sunpkcs11.jar

都是加密相關的包。

zipfs.jar

java 對zip文件操作的支持。

rt.jar包結構分析

rt.jar包含核心Java Runtime環境的所有已編譯類文件。rt.jar包的總體結構如下圖所示

當我們在裝好java環境之后,有一些類我們就是可以直接使用的,例如List,原因在於java的類加載機制已經將這些最基本的類即jdk核心代碼加載好了。負責這一事情的類加載器就是Boot Strap ClassLoader,它唯一做的事情就是負責從bootstrap  classpath加載類,並且只加載rt.jar。 並且該加載具有最高優先級。其中最為核心的也是我們最常使用的類位於java這個包下面,如下:

applet負責網絡應用程序部分,awt負責ui部分的支持。beans

io包負責輸入輸出流的支持,lang下面則包含了非常多的東西,包括反射,注解等。

math包包含了一些科學計算方面的類如BigDecimal等

net包含了支持網絡編程的類如Socket等等

nio即新io也是輸入輸出的支持,包含Channel管道通信等技術

rmi包含了對遠程服務調用支持的類

security包含安全,權限控制相關的類

sql包含了數據庫相關技術的類例如Driver,DriverManager等類

text包含了文本內容相關支持的類

time包含日期相關的類如Date,Calendar,Month等等

util是一個非常大的包,下面包含的東西非常多,包括並發支持,正則表達式,日志,容器等非常重要的類。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM