5 分鐘掌握 Java 核心之 一:你真的瞭解 Java 麼?

問題

  1. java 是一門多範式的語言,你知道麼?它支持哪些編程範式?
  2. JRE 和 JDK 分別指什麼?它們的關係是咋樣的?
  3. 爲什麼安裝 JDK 的時候會安裝兩個 JRE?
  4. Java8 到 Java13 都有哪些重大變化?JRE從哪個版本開始退出歷史舞臺,原因是什麼?
  5. OpenJDK 和 Oracle JDK 有啥區別?

目標

對 Java 發展、主要特性、構成有一個基本的瞭解。

Java 是多範式的語言

  1. 傳統 Java 是解釋型的語言,現在的 JIT、AOT 技術,讓 Java 也支持了編譯型語言的特性;
  2. 傳統 Java 是面向對象的語言,JDK8 引入 Lambda,讓 Java 支持函數式編程範式。
  3. 傳統 Java 是命令式編程範式,JDK9 引入 Flow,讓 Java 更好的支持響應式編程範式;

基礎概念

Java SE:Java Platform Standard Edition

JRE:Java Runtime Environment

JDK:Java Development Kit

JVM:Java Virtual Machine

看這張圖,上面的關係應該非常清晰了。

java conceptual diagram
注:從 Java 9 開始上面的圖沒有了。

java 版本發佈時間

  • JDK 1.0 - January 23, 1996
  • JDK 1.1 - February 19, 1996
  • J2SE 1.2 - December 8, 1998
  • J2SE 1.3 - May 8, 2000
  • J2SE 1.4 - February 6, 2002
  • J2SE 5.0 - September 30, 2004
  • Java SE 6 - December 11, 2006
  • Java SE 7 - July 28, 2011
  • Java SE 8 (LTS) - March 18, 2014:Lambda
  • Java SE 9 - September 21, 2017:Java 模塊系統、HTTP2、JShell、Reactive Streams、G1 爲默認 GC。
  • Java SE 10 - March 20, 2018:並行 G1
  • Java SE 11 (LTS) - September , 2018:ZGC
  • Java SE 12 - March 19, 2019:Shenandoah GC
  • Java SE 13 - September 17, 2019

注:從 Java 9 開始每半年一個版本,每三年一個 LTS

答疑

JDK 和 JRE 的關係是什麼?

JDK 包含了 JRE,上圖說明了一切。最明顯的區別就是編譯java 程序使用的 javac 只有jdk 有,jre 沒有, jre 只能運行 java 程序但是不能編譯 java 代碼。

爲什麼安裝 JDK 的時候會安裝兩個 JRE?

首先必須理解 JRE 和 JDK 的關係。在此基礎上,運行普通的 Java 程序,必須依賴 JRE,而 JDK 是可選的。

jdk/bin 下包括 java 開發工具。而 jdk/jre/bin 下只包含 java 運行的工具。前面是後面的超集。

JRE從哪個版本開始退出歷史舞臺,原因是什麼?

java11開始,Oracle和openJDK就不再有JRE這個單獨的文件夾了。你直接下載使用JDK就好了。

JRE 最初存在的部分原因是爲了支持 applet 和 swing,但是這些目前已經基本處於無用的狀態,而且給 java 新的發展帶來了很大的包袱。從 Java9 開始出現了jigsaw,用 Jlink 可以從 jmods 定製更小的自定義 runtime,plugin之類的也逐漸退役了,並不是不需要 jre 了,而是安裝的時候自帶 jre 的需求在降低。

Java8 到 Java13 都有哪些重大變化?

後續我會專門一篇文章說明。

OpenJDK 和 Oracle JDK 有啥區別?

維度 Oracle JDK OpenJDK
協議 Java11之前爲 BCL,Java11 開始GPLv2 + CPE GPLv2
開發 Sun Microsystems Inc. Oracle, OpenJDK & Java社區
性能 一樣 沒有區別
發佈週期 Java10開始每6個月,有LTS爲三年支持 每版本6個月
速度 一樣 一樣
操作系統 Supports Windows, Linux, Solaris, MacOS FreeBSD, Linux, Microsoft Windows, Mac OS X

注:從 Java11 開始商業特性Flight Recorder, Java Mission Control, 和 Application Class-Data Sharing、ZGC可以在 OpenJDK 使用了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章