java技術體系
- Sun官方定義的java技術體系包括:
- Java程序設計語言
- 各種硬件平臺上的Java虛擬機
- Class文件格式
- Java API類庫
- 來自商業(yè)機構(gòu)和開源社區(qū)的第三方Java類庫
- JDK:用于支持Java程序開發(fā)的最小環(huán)境闸溃,內(nèi)容包括:
- Java程序設計語言
- Java虛擬機
- Java API類庫
- JRE:支持Java程序運行的標準環(huán)境,內(nèi)容包括:
- Java API類庫中的Java SE API子集
- Java虛擬機
以上Java技術體系圖是根據(jù)各個組成部分的功能來進行劃分的器净。如果按照Java技術服務的領域來劃分挫以,可分為以下4個平臺:
- Java Caard
- Java ME
- JavaSE(Standard Edition):支持面向桌面級應用的java平臺栈妆,提供了完整的Java核心API喊暖,這個版本以前稱為J2SE。
- JavaEE(Enterprise Edition):支持使用多層架構(gòu)的企業(yè)應用(如ERP嘁信、CRM應用)的Java平臺勤哗,除了提高Java SE API外抡爹,還對其做了打了擴充,并提供了相關部署支持芒划,這個版本以前稱為J2EE冬竟。
- javaEE對JavaSE提供的擴展一般以java.*作為包名欧穴,而以java.*為包名的都是javaSE API的核心包,但由于歷史原因诱咏,一部分曾經(jīng)是擴展包的API后來進入了核心包苔可,因此核心包中也包含了不少javax.*的包名。
Java語言口號
Write Once , Run Anywhere袋狞。
JDK命名
- JDK從1.5版本開始焚辅,官方在正式文檔與宣傳上不再使用類似JDK1.5的命名,只在程序內(nèi)部使用的的開發(fā)版本號(Developer Version苟鸯,例如java --version的輸出)中才繼續(xù)沿用1.5,1.6...同蜻。而攻克版本號(Product Version)則改為JDK5、JDK6早处、JDK7的命名方式湾蔓。
Java開源
- 2006年11月13日的JavaOne大會上,Sun公司宣布開源java,JDK1.6在12月11日發(fā)布砌梆。并建立了OpenJDK組織對浙西源碼進行獨立管理默责,除了極少量的產(chǎn)權代碼(Encumbered Code,這部分代碼大多史Sun本身也無權限進行開源處理的)外咸包,OpenJDK幾乎包括了Sun JDK的全部代碼桃序。
Java虛擬機發(fā)展史
Sun公司的java虛擬機
- Sun Classic VM: JDK1.0提供的一個純解釋執(zhí)行的Java虛擬機。
- Exact VM:JDK1.2提供烂瘫,具有兩級及時編譯器媒熊、編譯器與解釋器混合工作模式,使用了準確式內(nèi)存管理(Exact Memory Management坟比,也叫Non-Conservative/Accurate Memory Management)而得名芦鳍,即虛擬機可以知道內(nèi)存中某個位置的數(shù)據(jù)具體式什么類型。譬如內(nèi)存中有一個32位的整數(shù)123456葛账,它到底式一個reference類型指向123456的內(nèi)存地址還是一個數(shù)值位123456的整數(shù)柠衅,虛擬機將有能力分辨出來,這樣才能在GC(垃圾收集)的時候準確判斷堆上的數(shù)據(jù)是否還可能被使用注竿。Exact VM拋棄了Classic VM基于handler的對象查找方式(原因是進行GC后對象將可能會被移動位置茄茁,如果將地址為123456的對象移動到654321,在沒有明確信息表明內(nèi)存中哪些數(shù)據(jù)是reference的前提巩割,虛擬機不敢把內(nèi)存中所有為123456的值改成654321的,所以要使用句柄來保持reference值的穩(wěn)定)付燥,這樣每次對象都少了一次間接查找的開銷宣谈,提升執(zhí)行性能。
- HotSpot VM:(目前一直使用)JDK1.2提供键科,內(nèi)置了JIT(Just in Time)編譯器闻丑,繼承了前面2款虛擬機的優(yōu)點如:Exact Memory Management漩怎。自己新技術,如其名:HotSpot指的就是它的熱點代碼探測技術嗦嗡,ExactVM中也有勋锤,熱點探測可以通過執(zhí)行計數(shù)器找出最具有編譯價值的代碼,然后通知JIT編譯器以方法為單位進行編譯侥祭。
其它公司的Java虛擬機
- JRockit VM:BEA公司收購的叁执,并將其發(fā)展為一款專門為服務器硬件和服務器端應用場景高度優(yōu)化的虛擬機,由于不太關注程序啟動速度只專注與服務端應用矮冬,因此JRockit內(nèi)部不包含解析器實現(xiàn)谈宛,全部代碼都靠即使編譯器編譯執(zhí)行芥映,JRockit的垃圾收集器和MissionControl服務套件等部分的實現(xiàn)吐根,在眾多Java虛擬機中也處于領先。
可以運行在Java虛擬機上的語言
圖片來源
對于這些運行于java虛擬機之上毡证,Java語言之外的語言琼牧,來自系統(tǒng)級的恢筝、底層底層的支持正在迅速增強,JSR-292為核心的一系列項目和功能改進巨坊,推動java虛擬機從“Java語言的虛擬機”向“多語言虛擬機"的方向發(fā)展撬槽。
編寫JDK使用的語言
- OpenJDK的各個組成部分(Hotspot、JDK API抱究、JAXWS恢氯、JAXP....)有的是使用C++編寫的,更多的代碼則是使用Java自身實現(xiàn)的鼓寺。