《深入理解Java虛擬機器》-周志明 -第3版-第一章摘記

詩水人間發表於2020-12-05

第一章講了java的發展和變遷,在章節末作者講到了編譯openjdk原始碼和除錯原始碼


java發展史

在這裡插入圖片描述


java的誕生起因史1991年4月,James Gosling博士領導的綠色計劃(Green Project),原先想開發一種能夠在各種消費性電子產品(如機頂盒、冰箱、收音機等)上執行的程式架構。取名為Oak (橡樹的意思)

  1995年5月23日,Oak語言改名為Java,並且在SunWorld大會上正式釋出Java 1.0版本。Java語言第 一次提出了“Write Once,Run Anywhere”的口號。

  1996年1月23日,JDK 1.0釋出,Java語言有了第一個正式版本的執行環境。JDK 1.0提供了一個純 解釋執行的Java虛擬機器實現(Sun Classic VM)。JDK 1.0版本的代表技術包括:Java虛擬機器、Applet、 AWT等。

  1997年2月19日,Sun公司釋出了JDK 1.1,Java裡許多最基礎的技術支撐點(如JDBC等)都是在 JDK 1.1版本中提出的,JDK 1.1版的技術代表有:JAR檔案格式、JDBC、JavaBeans、RMI等。Java語 言的語法也有了一定的增強,如內部類(Inner Class)和反射(Reflection)都是在這時候出現的。

  1998年12月4日,JDK 1.2釋出,工程代號為Playground(競技場),Sun在這個版本中把Java技術體系拆分為三個方向,分別是面向桌面應用開發的J2SE(Java 2 Platform,Standard Edition)、面向企業級開發的J2EE(Java 2 Platform,Enterprise Edition)和麵向手 機等移動終端開發的J2ME(Java 2 Platform,Micro Edition)。在這個版本中出現的代表性技術非常 多,如EJB、Java Plug-in、Java IDL、Swing等,並且這個版本中Java虛擬機器第一次內建了JIT(Just In Time)即時編譯器(JDK 1.2中曾並存過三個虛擬機器,Classic VM、HotSpot VM和Exact VM,其中 Exact VM只在Solaris平臺出現過;後面兩款虛擬機器都是內建了JIT即時編譯器的,而之前版本所帶的 Classic VM只能以外掛的形式使用即時編譯器)。在語言和API層面上,Java新增了strictfp關鍵字, Java類庫新增了現在Java編碼之中極為常用的一系列Collections集合類等。在1999年3月和7月,分別有 JDK 1.2.1和JDK 1.2.2兩個小升級版本釋出。

  1999年4月27日,HotSpot虛擬機器誕生。HotSpot最初由一家名為“Longview Techno-logies”的小公司 開發,由於HotSpot的優異表現,這家公司在1997年被Sun公司收購。Hot-Spot虛擬機器剛釋出時是作為 JDK 1.2的附加程式提供的,後來它成為JDK 1.3及之後所有JDK版本的預設Java虛擬機器。

  2000年5月8日,工程代號為Kestrel(美洲紅隼)的JDK 1.3釋出。相對於JDK 1.2,JDK 1.3的改進 主要體現在Java類庫上(如數學運算和新的Timer API等),JNDI服務從JDK 1.3開始被作為一項平臺 級服務提供(以前JNDI僅僅是一項擴充套件服務),使用CORBA IIOP來實現RMI的通訊協議,等等。這 個版本還對Java 2D做了很多改進,提供了大量新的Java 2D API,並且新新增了JavaSound類庫。JDK 1.3有1個修正版本JDK 1.3.1,工程代號為Ladybird(瓢蟲),於2001年5月17日釋出。

  2002年2月13日,JDK 1.4釋出,工程代號為Merlin(灰背隼)。JDK 1.4是標誌著Java真正走向成 熟的一個版本,Compaq、Fujitsu、SAS、Symbian、IBM等著名公司都有參與功能規劃,甚至實現自己 獨立發行的JDK 1.4。哪怕是在近二十年後的今天,仍然有一些主流應用能直接執行在JDK 1.4之上, 或者繼續釋出能執行在1.4上的版本。JDK 1.4同樣帶來了很多新的技術特性,如正規表示式、異常 鏈、NIO、日誌類、XML解析器和XSLT轉換器,等等。JDK 1.4有兩個後續修正版:2002年9月16日發 布的工程代號為Grasshopper(蚱蜢)的JDK 1.4.1與2003年6月26日釋出的工程代號為Mantis(螳螂) 的JDK 1.4.2。

  2004年9月30日,JDK 5釋出,工程代號為Tiger(老虎)。Sun公司從這個版本開始放棄了謙遜 的“JDK 1.x”的命名方式,將產品版本號修改成了“JDK x”[1]。從JDK 1.2以來,Java在語法層面上的變 動一直很小,而JDK 5在Java語法易用性上做出了非常大的改進。如:自動裝箱、泛型、動態註解、枚 舉、可變長引數、遍歷迴圈(foreach迴圈)等語法特性都是在JDK 5中加入的。在虛擬機器和API層面上,這個版本改進了Java的記憶體模型(Java Memory Model,JMM)、提供了java.util.concurrent併發包 等。另外,JDK 5是官方宣告可以支援Windows 9x作業系統的最後一個JDK版本。

  2006年12月11日,JDK 6釋出,工程代號為Mustang(野馬)。在這個版本中,Sun公司終結了從 JDK 1.2開始已經有八年曆史的J2EE、J2SE、J2ME的產品線命名方式,啟用Java EE 6、Java SE 6、Java ME 6的新命名來代替。JDK 6的改進包括:提供初步的動態語言支援(通過內建Mozilla JavaScript Rhino引擎實現)、提供編譯期註解處理器和微型HTTP伺服器API,等等。同時,這個版本對Java虛擬 機內部做了大量改進,包括鎖與同步、垃圾收集、類載入等方面的實現都有相當多的改動。

  2009年2月19日,工程代號為Dolphin(海豚)的JDK 7完成了其第一個里程碑版本。按照JDK 7最 初的功能規劃,一共會設定十個里程碑。最後一個里程碑版本原計劃定於2010年9月9日結束,但由於 各種原因,JDK 7最終無法按計劃完成。

  從JDK 7最原始的功能清單來看,它本應是一個包含許多重要改進的JDK版本,其中規劃的子項 目都為Java業界翹首以盼,包括:

  • Lambda專案:支援Lambda表示式,支援函數語言程式設計。
  • Jigsaw專案:虛擬機器層面的模組化支援。
  • 動態語言支援:Java是靜態語言,為其他執行在Java虛擬機器上的動態語言提供支援。
  • Garbage-First收集器。
  • Coin專案:Java語法細節進化。

  2014年3月18日,JDK 8分佈,誕生了lambda表示式、全新時間API 等新特性

  2017年9月21日,JDK 9釋出,誕生了模組化子系統、jshell 等新特性

  2018年3月20日,JDK 10釋出,更新了12個 等新特性,由於java9的模組化子系統是一個大的轉變,10的釋出則是統一源倉庫、垃圾收集器介面、即時編譯器介面等,為後期發展做準備。

  2018年9月25日,JDK 11釋出,這是一個LTS版本的JDK,包含17個JEP,其中有ZGC這樣的革命 性的垃圾收集器出現,也有把JDK 10中的型別推斷加入Lambda語法這種可見的改進;

  2019年3月20日,JDK 12釋出,只包含8個JEP,其中主要有Switch表示式、Java微測試套件 (JMH)等新特性,最引人注目的特性無疑是加入了由RedHat領導開發的Shen-andoah垃圾收集器。 Shenandoah作為首個由非Oracle開發的垃圾收集器,其目標又與Oracle在JDK 11中釋出的ZGC幾乎完全 一致,兩者天生就存在競爭。Oracle馬上用實際行動抵制了這個新收集器,在JDK 11釋出時才說應盡 可能保證OracleJDK和OpenJDK的相容一致,轉眼就在OracleJDK 12裡把Shenandoah的程式碼通過條件編 譯強行剔除掉,使其成為歷史上唯一進入了OpenJDK釋出清單,但在OracleJDK中無法使用的功能。


下面是自己收集的資訊:

  2019年9月17日,JDK 13釋出。switch表示式引入yield用與返回值、文字塊 等新特性

  2020年3月17日,JDK 14釋出。instanceof 強化、record關鍵字、引入ZGC 等新特性

  2020年9月17日,JDK 15釋出。ZGC轉正成為預設的垃圾回收器STW停頓時間<10ms 等新特性


市面上常見的虛擬機器

SUN Classic VM的介紹

Exact VM的介紹

HotSpot虛擬機器的介紹

JRockit VM的介紹

J9 的介紹

Apache Harmony的介紹

Microsoft JVM 以及 Taobao JVM 的介紹

Graal VM 未來可能的趨勢

編譯OpenJDK

Ubuntu20.04.1系統下使用Clion搭建openjdk15原始碼環境,進行除錯C原始碼

相關文章