企業一般用JDK哪個版本?
現在企業開發一般都用的是jdk8。我的建議,當然也是我們公司目前的情況, 選擇開發環境和部署環境,關鍵還要看是做項目還是做平臺, 做項目的話,根據項目實際情況,從非功能性需求,(可靠性,穩定性,可擴展性,可移植性,性能,易用性,開發人員技術,可用性,可維護性等多方面考慮),選擇開發環境和部署環境也就屬于非功能性需求的一部分,其實已經可以決定了 做平臺的話,當然就是長遠來考慮,穩定性和可靠算是最主要的考慮因素,當然做平臺就會考慮支持從1.5到最新版本都支持,這也就不存在選擇的問題,而是通用性的問題。
JDK 11 目前出現了4個JEP,計劃于 2018 年 9 月發布。
JEP 309: 動態類文件常量。JEP 318: 低開銷垃圾收集器 Epsilon。JEP 320: 移除 Java EE 和 CORBA 模塊。JEP 323: Lambda 參數的本地變量語法。JDK 10
JDK 10 按計劃將于2018年3月20日發布。新特性有:
JEP 286: 局部變量的類型推導。該特性在社區討論了很久并做了調查,可查看 JEP 286 調查結果。JEP 296: 將 JDK 的多個代碼倉庫合并到一個儲存庫中。JEP 304: 垃圾收集器接口。通過引入一個干凈的垃圾收集器(GC)接口,改善不同垃圾收集器的源碼隔離性。JEP 307: 向 G1 引入并行 Full GC。JEP 310: 應用類數據共享。為改善啟動和占用空間,在現有的類數據共享(“CDS”)功能上再次拓展,以允許應用類放置在共享存檔中。JEP 312: 線程局部管控。允許停止單個線程,而不是只能啟用或停止所有線程。JEP 313: 移除 Native-Header Generation Tool (javah)JEP 314: 額外的 Unicode 語言標簽擴展。包括:cu (貨幣類型)、fw (每周第一天為星期幾)、rg (區域覆蓋)、tz (時區) 等。JEP 316: 在備用內存設備上分配堆內存。允許 HotSpot 虛擬機在備用內存設備上分配 Java 對象堆。JEP 317: 基于 Java 的 JIT 編譯器(試驗版本)。JEP 319: 根證書。開源 Java SE Root CA 程序中的根證書。JEP 322: 基于時間的版本發布模式?!癋eature releases” 版本將包含新特性,“Update releases” 版本僅修復 Bug 。JDK 9
JDK 9 于2017年9月21日發布。新特性有:
模塊化 —— Jigsaw交互式命令行 —— JShell默認的垃圾回收器 —— G1進程操作改進競爭鎖的性能優化分段代碼緩存優化字符串占用空間這個版本中最引人注目的時候模塊化,通過這個工作,可以構建更小的運行時環境,只需要包括Java平臺中任務依賴的部分。這可以更好地適應云端的開發。
具體的特性包括:
JEP 102: 改善了控制和管理操作系統進程的 API。JEP 110: 定義了一個新的 Http 客戶端 API,它實現了 和 ,并且可以替代遺留的 API。該 API 將會以一個 incubator 模塊的形式進行交付。JEP 143: 提高競爭 Java 對象的監視性能。JEP 158: 統一 JVM 的日志。JEP 165: 通過支持運行時管理來增加對 JVM 編譯器的管理。JEP 193: 對變量處理的改進。JEP 197: 將代碼緩存劃分成不同的段。JEP 200: 采用 Java 平臺模塊化系統(Java Platform Module System,JPMS)對JDK進行模塊化。JEP 201: 源代碼模塊化。JEP 211: 在 import 語句中 省略 的警告。JEP 212: 解決 lint 和 doclint 警告。JEP 213: Project Coin 的改變JEP 214: 移除 JDK 8 中 GC 組合器的廢棄說明。JEP 215: 在 javac 中實現了一個新的類型檢測策略。JEP 216: 正確地處理導入聲明。JEP 217: 注解流水線 2.0。JEP 219: 定義了數據傳輸層安全(Datagram Transport Layer Security, DTLS)API。JEP 220: 模塊化運行時鏡像。JEP 221: 簡化 API。JEP 222: jshell - Java 中的交互式命令行。JEP 223: 新的版本字符串模式。JEP 224: 增強了 javadoc 工具來生成 HTML5 標記。JEP 225: 增加了 javadoc 搜索。JEP 226: UTF-8 屬性文件資源的Bundle相關變化。JEP 227: Unicode 7.0。JEP 228: 增加更多可診斷的命令。JEP 229: 將默認的秘鑰庫從 JKS 替換為 PKCS12。JEP 231: 移除運行時 JRE 版本選擇。JEP 232: 增強了安全相關應用的性能。JEP 233: 開發了一個工具來自動測試運行時編譯器。JEP 235: 增加關于 javac 生成類文件屬性的 測試。JEP 236: 定義了解析 API 來支持 Nashorn 的 ECMAScript 抽象語法樹。JEP 237: Linux/AArch64 端口相關。JEP 238: 多版本 JAR 文件。JEP 240: 移除 JVM 的 TI hprof 客戶端。JEP 241: 移除 jhat 工具。JEP 243: 提供 Java 語言級的 JVM 編譯接口。JEP 244: TLS 應用層協議協商。JEP 245: 驗證 JVM 命令行標志參數。JEP 246: 利用 CPU 指令提升 GHASH 和 RSAd 的性能。JEP 247: 對老平臺版本的編譯支持。JEP 248: G1 作為默認的垃圾回收器。JEP 249: 基于 TLS 實現 OCSP Stapling。JEP 250: 在類數據分享(CDS)歸檔中存儲 interned 字符串。JEP 251: 多方案鏡像。JEP 252: 默認使用 CLDR Locale Data。JEP 253: 為 JavaFX UI 控制 和 CSS API 的模塊化做準備。JEP 254: 采用一個空間更加高效的 String 內部表示。JEP 255: 合并 Xerces 2.11.0 中的更新。JEP 256: BeanInfo 注解調整。JEP 257: 更新 JavaFX/Media 中 GStreamer 的版本。JEP 258: 使用 HarfBuzz 作為字體布局引擎。JEP 259: 定義了一個高效標準的 Stack-Walking API。JEP 260: 封裝大部分的內部 API。JEP 261: 實現模塊化系統。JEP 262: 支持 TIFF 圖像 I/O。JEP 263: 實現 Windows 和 Linux 高分辨率圖像接口。JEP 264: 平臺日志 API 和 服務。JEP 265: Java 2D 使用 Marlin Graphics Renderer。JEP 266: 并發相關的一些更新。JEP 267: 支持 Unicode 8.0。JEP 268: 支持 XML 目錄。JEP 269: 增加一些集合類創建的工廠方法。JEP 270: 為臨界區預留棧的某些區域。JEP 271: 統一 GC 日志。JEP 272: 增加特定平臺的桌面特性。JEP 273: Deterministic Random Bit Generator (DRBG) 的實現。JEP 274: 增強方法處理器。JEP 275: Java 應用模塊化打包。JEP 276: 語言定義對象模型的動態鏈接。JEP 277: 改善 Deprecation。JEP 278: 為 G1 中的巨大對象增加測試。JEP 279: 改進測試故障排除。JEP 280: 指示字符串串聯。JEP 281: HotSpot C++ 單元測試框架。JEP 282: Java連接器 jlink。JEP 283: 在 Linux 上支持 GTK 3。JEP 284: 新的 HotSpot 構建系統。JEP 285: 自旋等待提示。JEP 287: 實現 SHA-3 Hash 算法。JEP 288: 禁止 SHA-1 驗證。JEP 289: 廢棄 Applet API。JEP 290: 過濾輸入的序列化數據。JEP 291: 廢棄 Concurrent Mark Sweep (CMS) 垃圾收集器。JEP 292: 在 Nashorn 中支持 ECMAScript 6 特征。JEP 294: Linux/s390x 端口。JEP 295: 提前編譯。JEP 297: 統一 arm32/arm64 端口。JEP 298: 移除過時的例子。JEP 299: 重新組織文檔。JDK 8
JDK 8 于2014年3月14號發布。從 Java 8 開始開發代號已經棄用了。新特性有:
Lambda 表達式Pipelines 和 StreamsDate 和 Time APIDefault 方法Type 注解Nashhorn JavaScript 引擎并發計數器Parallel 操作移除 PermGen ErrorTLS SNI第三個有里程碑意義的 Java 版本。其中最引人注目的便是 Lambda 表達式了,從此 Java 語言原生提供了函數式編程能力。Java 8 更加適應海量云計算的需要。
具體的特性包括:
JEP 117: 移除注解處理工具(Annotation-Processing Tool,apt)。JEP 124: 增強證書撤銷檢查 API。JEP 130: 實現 SHA-224 消息摘要算法。JEP 131: 在 64-bit Windows 中支持 PKCS#11。JEP 112: Charset 實現改善。JEP 129: 實現 NSA Suite B 加密算法。JEP 105: DocTree API。JEP 106: 擴展 API 來支持 javadoc 的訪問。JEP 113: 在 JDK 的 Kerberos 5 中添加 MS-SFU 擴展。JEP 114: TLS Server Name Indication (SNI) 擴展。JEP 121: 提供更強的 Password-Based-Encryption (PBE) 算法實現。JEP 122: 移除永久帶(Permanent Generation)。JEP 127: 改善 Locale Data Packaging,并且采用 Unicode CLDR Data。JEP 128: Unicode BCP 47 本地匹配。JEP 133: 支持 Unicode 6.2。JEP 136: 增強錯誤驗證。JEP 153: 啟動 JavaFX 應用。JEP 177: 優化 。JEP 103: 并行數組排序。JEP 135: Base64 編碼和解碼。JEP 138: 基于 Autoconf 的自動構建系統。JEP 139: 增強 javac 來提高構建速度。JEP 142: 減少對于特定域的高速緩存的爭奪。JEP 147: 減少類元數據占用。JEP 148: 支持小虛擬機(不超過3M)的創建。JEP 149: 減少核心庫的內存使用。JEP 150: 新的 Date 和 Time API。JEP 160: lambda 函數表達式。JEP 164: 利用 CPU 指令進行 AES 加密。JEP 166: 針對JKS、JCEKS、PKCS12秘鑰存儲的修改。JEP 170: JDBC 4.2。JEP 172: DocLint。JEP 173: 放棄一些很少使用的 GC 組合。JEP 101: 泛華目標類型接口。JEP 104: 在 Java 類型上加注解。JEP 107: 增加集合的批量數據操作。JEP 109: 在核心庫中增加 Lambda 表達式。JEP 115: 認證加密的密碼套件。JEP 118: 在運行時訪問參數名稱。JEP 119: 通過反射實現 API。JEP 120: 重復注解。JEP 123: 可配置的安全隨機數生成。JEP 126: lambda 表達式和虛擬擴展方法。JEP 140: 限制的 doPrivileged。JEP 155: 并發庫更新。JEP 161: 緊湊版本。JEP 162: 為模塊化做準備。JEP 171: 在 中增加三個內存排序相關的指令。JEP 174: Nashorn JavaScript 引擎。JEP 176: 提供調用者敏感的檢測機制。JEP 178: 靜態鏈接的 jni 庫。JEP 179: JDK API 的文檔的支持和穩定。JEP 180: 對于頻繁沖突的 HashMap 使用平衡樹。JEP 184: HTTP URL的權限。JEP 185: 限制外部 XML 資源的獲取。JDK 7
開發代號是 Dolphin(海豚),于2011年7月28日發行。新特性有:
語句塊中允許以字符串作為分支條件;在創建泛型對象時應用類型推斷;在一個語句塊中捕獲多種異常;支持動態語言;支持 ;引入 Java NIO.2 開發包;數值類型可以用2進制字符串表示,并且可以在字符串表示中添加下劃線;鉆石型語法; 值的自動處理。這個版本中的主要的特性是 NIO2 和 Fork/Join 并發包,Java 虛擬機的穩定性真正做到的工業級,成為一個計算平臺而服務于全世界。
JDK 6
開發代號為 Mustang(野馬),于2006年12月11日發行。新特性有:
支持腳本語言;引入 JDBC 4.0 API;引入 Java Compiler API;可插拔注解;增加對 Native PKI(Public Key Infrastructure)、Java GSS(Generic Security Service)、Kerberos 和 LDAP(Lightweight Directory Access Protocol) 的支持;繼承 Web Services;做了很多優化。這個語言語法改進不多,但在虛擬機內部做了大量的改進,成為一個相當成熟穩定的版本,時至今日國內的很多公司依然以 Java6 作為主要 Java 開發版本來使用。
同年 Sun 公司做出一個偉大的決定,將 Java 開源。OpenJDK 從 Sun JDK 1.7 版本分支出去,成為今天 OpenJDK 的基礎。
JDK 5
開發代號為Tiger(老虎),于2004年9月30日發行。新特性包有:
引入泛型;增強循環,可以使用迭代方式;自動裝箱與自動拆箱;類型安全的枚舉;可變參數;靜態引入;元數據(注解);引入 Instrumentation。Sun 不再采用 J2SE, J2EE 這種命名方式,而使用 Java SE 5, Java EE 5 這樣的名稱。
Java 5 是第二個里程碑式的版本。Java 語言語法發生很大的變化,如注解 (Annotation),裝箱 (Autoboxing),泛型 (Generic),枚舉 (Enum),foreach 等被加入,提供了 java.util.concurrent 并發包。
Java 5 對于 Java 語言的推動是巨大的,特別是注解的加入,使得語言定義靈活了很多,程序員可以寫出更加符合領域定義的描述性程序。
JDK 1.4
開發代號為 Merlin(隼),于2004年2月06日發行(首次在JCP下發行)。新特性有:
XML 處理;Java 打印服務;引入 Logging API;引入 Java Web Start;引入 JDBC 3.0 API;引入斷言;引入 Preferences API;引入鏈式異常處理;支持 IPv6;支持正則表達式;引入 Image I/O slot machine API。Java 語言真正走向成熟,提供了非常完備的語言特性,如 NIO,正則表達式,XML 處理器等。
同年微軟的.NET 框架發布,兩者開始了為期十幾年的暗自競爭。從語言特性上來說,.NET 后發先至,一直處于優勢。但 Java 依賴良好的開發者生態,絕大多數大型軟件公司的使用者眾多和不斷貢獻,以及對 Linux 操作系統良好的支持,漸漸的在服務器端獲得優勢地位。
JDK 1.3
開發代號為 Kestrel(紅隼),于2000年5月08日發行。新特性有:
引入Java Sound API;jar 文件索引;對 Java 的各個方面都做了大量優化和增強。J2EE 中的 Servlet 規范獲得了極大的成功,伴隨著互聯網的興起,和瀏覽器直接通過 HTTP 協議交互的 Servlet,和眾多的 MVC 框架,成為 Web1.0 的網紅。
JDK 1.2
開發代號為 Playground(操場),于1998年12月8日發行。新特性有:
引入集合(Collection)框架;對字符串常量做內存映射;引入 JIT(Just In Time) 編譯器;引入對打包的 Java 文件進行數字簽名;引入控制授權訪問系統資源的策略工具;引入 JFC(Java Foundation Classes),包括 Swing 1.0、拖放和 Java 2D 類庫;引入 Java 插件;在 JDBC 中引入可滾動結果集、BLOB、CLOB、批量更新和用戶自定義類型;在 Applet 中添加聲音支持。Java 第一個里程碑式的版本。JIT(Just in time)編譯器技術,使得語言的可遷移性和執行效率達到最優的平衡,同時 Collections 集合類設計優良,在企業應用開發中迅速得到了廣泛使用。
Sun 公司把 Java 技術體系分成三個方向,分別是 J2SE(面向桌面和通用應用開發),J2EE(面向企業級應用開發),J2ME(面向移動終端開發)。這個分類影響非常久遠,體現出主流語言設計者的思想:針對于不同的應用領域,在形態,API 集合等進行劃分。
JDK 1.1
于 1997年2月19日發行,新特性有:
引入JDBC(Java Database Connectivity);支持內部類;引入Java Bean;引入RMI(Remote Method Invocation);引入反射(僅用于內?。?p>Java 語言的基本形態基本確定了,比如反射 (reflection), JavaBean, 接口和類的關系等等,一直到今天都保持一致。然而,Java 最初的一些目標,如在瀏覽器中執行 Applet,以及跨平臺的圖形界面 Awt 很快遭遇到負面的評價。JDK 1.0
開發代號為Oak(橡樹),于1996年1月23發行。特點有:
提供了一個解釋執行的 Java 虛擬機;Applet 能在 Mozilla 瀏覽器中運行。Java 的 Applet 能在 Mozilla 瀏覽器中運行,被看作是未來的互聯網語言。
起源
Java 語言源于 1991 年 Sun 公司 James Gosling 領導的的 Ork 項目,1995 年 Sun 公司正式起名為 Java,并提出“Write once, Run anywhere"的口號。