跳转到内容

Java版本歷史:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
Mantogogo留言 | 贡献
通过翻译页面“Java version history”创建
Mantogogo留言 | 贡献
通过翻译页面“Java version history”创建
标签参考文献语法出错或被移除 增加不可靠来源 加入博客链接 检查外部链接 增加广告宣传内容 内容翻译
第1行: 第1行:
[[Java|Java語言]]自[[JDK]] 1.0以來經歷了多次更改,也大量在基本的[[程式庫]]中增加了[[类 (计算机科学)|類別]]和包裝。自J2SE 1.4開始,Java語言的演變受Java Community Process(JCP)的約束,JCP使用Java規範請求(Java Specification Requests,JSRs)來建議和定對[[Java平台]]的添加和編修。Java語言由Java語言規範組織(Java Language Specification,JLS)定,對JLS的更改[[JSR 901]]負責管理。
[[Java|Java語言]]自[[JDK]] 1.0版本以來經歷了多次更改,也大量在基本的[[程式庫]]中增加了[[类 (计算机科学)|類別]]和套件。自J2SE 1.4開始,Java語言的演變受Java Community Process(JCP)的約束,JCP使用Java規範請求(Java Specification Requests,JSRs)來建議和定對[[Java平台]]的添加和編修。Java語言由Java語言規範(Java Language Specification,JLS)定,對JLS的更改則根據[[JSR 901]]管理。


除了語言上變化,多年來對Java類別庫(JCL)進行了更加戲劇性的改變,從JDK 1.0中的幾百個類別增長到J2SE 5中的三千多個類別。全新的[[应用程序接口|API]],像是[[Swing (Java)|Swing]]和Java2D皆已經啟用,許多原來的JDK 1.0類別和方法卻已被拋棄使用。當然,仍然有一些程式可以將Java程式從新版本的Java平台轉換為較舊版本(例如Java 5.0降轉到1.4)(可參考Java backporting tools)。 
除了語言上變化,多年來對Java類別庫(JCL)進行了更加戲劇性的改變,從JDK 1.0中的幾百個類別增長到J2SE 5中的三千多個類別。全新的[[应用程序接口|API]],像是[[Swing (Java)|Swing]]和Java2D皆已經啟用,許多原來的JDK 1.0類別和方法卻已被拋棄使用。當然,仍然有一些程式可以將Java程式從新版本的Java平台轉換為較舊版本(例如Java 5.0降轉到1.4)(可參考Java backporting tools)。 


在Java 7發布之後,Oracle承諾回到以前每兩年發布一次的發布週期。<ref name="oracle-curl">{{Cite news|url=http://www.theregister.co.uk/2012/03/07/oracle_java_9_10_roadmap/|title=Java won't curl up and die like Cobol, insists Oracle|last=Clarke|first=Gavin|date=2012-03-07|work=The Register}}</ref>但是,在2013年時,Oracle卻宣布他們將Java 8延遲一年,為了修復與Java安全漏洞。 <ref>{{Cite news|url=http://www.infoworld.com/d/application-development/java-8-release-delayed-until-next-year-216797|title=Java 8 release delayed until next year|last=Krill|first=Paul|date=2013-04-18|work=InfoWorld|accessdate=2013-05-06}}</ref>
在Java 7發布之後,Oracle承諾回到以前每兩年發布一次的發布週期。但是,在2013年時,Oracle卻宣布他們將Java 8延遲一年,為了修復與Java安全漏洞。 


Java 8是唯一公開支援的版本,而在舊版本的公開支援期間結束後,已經為Java 7和其它更早的版本發布了非公開的更新。
Java 8是唯一公開支援的版本,而在舊版本的公開支援期間結束後,已經為Java 7和其它更早的版本發布了非公開的更新。
第45行: 第45行:


== JDK 1.0 ==
== JDK 1.0 ==
第一個版本於1996年1月23日發布,叫做為Oak<ref name="pr10">{{Webarchive|url=https://web.archive.org/web/20070310235103/http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml|date=March 10, 2007|title=JAVASOFT SHIPS JAVA 1.0}}</ref>。而真正第一個穩定的版本 JDK 1.0.2,被稱作Java 1。<ref name="JavaHistory">{{Cite book|url=http://www.oracle.com/technetwork/java/chapter1-159190.pdf|title=Mobile Information Device Profile for Java 2 Micro Edition: Developer's Guide|last=Ortiz|first=C. Enrique|last2=Giguère|first2=Éric|publisher=[[John Wiley & Sons]]|accessdate=May 30, 2012|year=2001|isbn=978-0471034650|format=PDF}}</ref>
第一個版本於1996年1月23日發布,叫做為Oak<ref name="pr10">{{Webarchive|url=https://web.archive.org/web/20070310235103/http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml|date=March 10, 2007|title=JAVASOFT SHIPS JAVA 1.0}}</ref>。而真正第一個穩定的版本 JDK 1.0.2,被稱作Java 1。


== JDK 1.1 ==
== JDK 1.1 ==
第103行: 第103行:


Tiger 增加了若干個重要的新語言功能。<ref name="pr15">[http://web.archive.org/web/20080207083457/http://www.sun.com/smi/Press/sunflash/2004-09/sunflash.20040930.1.xml Version 1.5 press release].</ref><ref name="ch15">[http://java.sun.com/j2se/1.5/docs/relnotes/features.html Version 1.5 full list of changes].</ref>
Tiger 增加了若干個重要的新語言功能。<ref name="pr15">[http://web.archive.org/web/20080207083457/http://www.sun.com/smi/Press/sunflash/2004-09/sunflash.20040930.1.xml Version 1.5 press release].</ref><ref name="ch15">[http://java.sun.com/j2se/1.5/docs/relnotes/features.html Version 1.5 full list of changes].</ref>
* 泛形(Generics)︰ 為集合提供編譯期間 (靜態) 型別安全,且不須為大多數類型轉換 (型別轉換) (規範在 JSR 14)
* 中繼資料([[元数据|Metadata]])︰ 也稱作注釋。讓語言結構(像是類別和方法)能夠用額外的資料標記,可以由中繼資料意識工具處理(規範在 JSR 175)
* 自動封裝與解封裝︰ 在基本的資料型別(如 int)和基本的的外覆類別 (如 Integer) 之間能夠自動轉換 (規範在 JSR 201)
* 枚舉(Enumerations)︰ 以 enum 關鍵字創造出一種型別安全,有排序值的清單(如 Day.MONDAY、 Day.TUESDAY 等);以前這只能透過非型別安全的恒定整數或自行撰寫的類別來達成 (型別安全的枚舉模式) (規範在 JSR 201)
* 可變參數函數(Varargs):方法的最後一個參數現在可以用一個類型名稱加上三個點宣告(如:void drawtext(String... lines));在調用代碼中,型別中參數裡任何的數字可以被使用,而它們再放在一個陣列來傳遞給方法,或是其它的調用代碼可以傳遞那個型別的陣列
* 強化 <code>[[Foreach循环|for each]]</code> 迴圈:<code>for</code> 迴圈的語法被用特別的語法擴充了,以不是陣列就是其它 {{Javadoc:SE|java/lang|Iterable}}重複每個成員,像是基本的 {{Javadoc:SE|java/util|Collection}} 類別 (規範在 [http://www.jcp.org/en/jsr/detail?id=201 JSR 201])
* 改進多執行緒JAVA 程式的執行語義;新的 JAVA 記憶體模組解決問題的複雜性、 有效性和以前的規格性能<ref name="jsr-133">{{cite web|url=https://www.jcp.org/en/jsr/detail?id=133|title=JSR 133, 2.4 Why isn't this need met by existing specifications?|publisher=Oracle}}</ref><br>
* 匯入靜態類別
另外也有以下這些對於基本程式庫的改善:
* 自動產生 [[桩 (计算机)|stub]] 給 [[Java远程方法调用|RMI]] 物件
* [[Swing (Java)|Swing]]:新的介面外觀,叫做 synth
* [http://java.sun.com/j2se/1.5.0/docs/guide/concurrency/overview.html concurrency utilities] 在 <tt>[http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html java.util.concurrent] 套件中</tt>[http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html]<ref>{{cite book|title=Java Concurrency in Practice|last=Goetz|first=Brian|publisher=Addison-Wesley|year=2006|isbn=0-321-34960-1|page=xvii}}</ref>
* Scanner 類別來轉換來自各式各樣的輸入和buffer
Java 5是Java的最後一個正式支援Microsoft Windows 98和Windows ME的版本<ref>{{Cite web|url=http://www.java.com/en/download/windows98me_manual.jsp|title=Java 5.0 is no longer available on Java.com|accessdate=2016-09-30|date=2009-11-03|publisher=Java.com}}</ref>,而Windows Vista是J2SE 5在2009年10月的Java 5生命週期之前支援的Windows的最新版本。


Java 5 Update 5(1.5.0_05)是Java在Windows 95(裝了Internet Explorer 5.5 的)和Windows NT 4.0上運行的最後一個版本。<ref>{{Cite web|url=http://toastytech.com/guis/miscb2.html|title=Misc Windows 2 – Nathan's Toasty Technology page|accessdate=2016-09-30|last=Lineback|first=Nathan}}</ref>
JAVA 5 最初出現在蘋果 Mac OS X 10.4 (Tiger)<ref>{{Cite web|url=https://www.sitepoint.com/java-5-available-for-mac-os-x/|title=Java 5 available for Mac OS X|accessdate=30 September 2016|date=3 May 2005}}</ref>,到了蘋果 Mac OS X 10.5 (Leopard)時成為了預設的 JAVA 版本。

JAVA 5 最初出現在蘋果 Mac OS X 10.4 (Tiger),到了蘋果 Mac OS X 10.5 (Leopard)時成為了預設的 JAVA 版本。


=== 版本控制系統的改變 ===
=== 版本控制系統的改變 ===
此版本推出了 JAVA 語言中,一個新的版本控制系統,而舊版本控制系統仍然可以在開發者資源庫中繼續使用。{{Quote|text=Both version numbers "1.5.0" and "5.0" are used to identify this release of the Java 2 Platform Standard Edition. Version "5.0" is the product version, while "1.5.0" is the developer version. The number "5.0" is used to better reflect the level of maturity, stability, scalability and security of the J2SE.|source=[http://docs.oracle.com/javase/1.5.0/docs/relnotes/version-5.0.html Version 1.5.0 or 5.0?<ref>{{cite web|title=Version 1.5.0 or 5.0?|url=http://docs.oracle.com/javase/1.5.0/docs/relnotes/version-5.0.html|publisher=Oracle.com|accessdate=18 April 2016}}</ref>]}}這種對應關係持續維持到以後的版本 (Java 6 = JDK 1.6, Java 7 = JDK 1.7, 以此類推).
此版本推出了 JAVA 語言中,一個新的版本控制系統,而舊版本控制系統仍然可以在開發者資源庫中繼續使用。

=== Java 5 更新 ===
{| class="wikitable" style="margin-bottom: 407px;"
! width="160" | 版本
! width="100" | 釋出日期
!重點
|-
|Java SE 5
|2004-10-4
|Metadata、泛型型別、對基礎型別自動封裝和自動解封裝、 加強 for 迴圈、 枚舉的類型、 靜態類別匯入,格式化 I/O、 varargs 和併發的實用工具。改進的啟動時間和記憶體佔用量。在多個正在運行的 Jvm 之間共用的唯讀資料。 遠端監控和管理。一個新的 JVM 配置 API。程序化的堆疊版本追蹤。支持對 XML 1.1 的命名空間、 XML 架構、 SAX 2.0.2,DOM 級別 3,與 XSLT 1.1 快速的 XLSTC 的編譯器。Unicode 4.0 支援。
|-
|Java SE 5 Update 1
|2004-12-25
|50 個漏洞修復
|-
|Java SE 5 Update 2
|2005-03-16
|一些中斷的修復。程式現在以較客製化的方式編譯。日曆漏洞修復和其它漏洞修復。
|-
|Java SE 5 Update 3
|2005-05-03
|這個版本修復了一些漏洞,包含在Linux Mozilla外掛的中斷。
|-
|Java SE 5 Update 4
|2005-07-04
|在這個版本中,J2SE對於64位元Windows的支持從候選版本中脫穎而出。這個版本在AMD64/EM64T 64位元模式運行用Windows Server 2003 x64 版本的機器。
|-
|Java SE 5 Update 5
|2005-09-18
|修復了一些漏洞以及表現增強。對Windows 95 和 Windows NT 4.0 最後的更新。
|-
|Java SE 5 Update 6
|2005-12-07
|在這個版本之前,Java小程式或應用程式可以決定想要運行的JRE版本,但從這個更新之後就不再是這樣了。所有的程式都用最新版本的JRE運行。
|-
|Java SE 5 Update 7
|2006-05-29
|修復了幾個漏洞並提高性能。
|-
|Java SE 5 Update 8
|2006-08-13
|修復了一些漏洞以及提高了性能。
|-
|Java SE 5 Update 9
|2006-11-12
|這個版本修復了一些小回歸。
|-
|Java SE 5 Update 10
|2006-12-22
|添加了由Linux 2.6支持的epoll I/O事件通知工具的實作。 許多漏洞被修復。
|-
|Java SE 5 Update 11
|2007-03-08
|修復了幾個漏洞並提高了性能。
|-
|Java SE 5 Update 12
|2007-06-11
|-
|Java SE 5 Update 13
|2007-10-05
|Java Web Start中與本地文件存取相關的多個安全漏洞已修復。 修復了允許繞過網路進入限制的JRE中的安全漏洞。 修復其他幾個安全問題和小錯誤。
|-
|Java SE 5 Update 14
|-
|Java SE 5 Update 15
|2008-03-06
|修復因緩衝堆超出邊界而導致的幾個崩潰漏洞以及其他一些小漏洞。 現在來自AOL,DigiCert和TrustCenter的新的[[根证书|根憑證]]已經被包含在內。
|-
|Java SE 5 Update 16
|2008-07-23
|此版本修復了幾個安全漏洞,例如DoS漏洞,緩衝區溢出和其他可能導致崩潰的漏洞,或是會給程式存取某些系統資源。 這些漏洞位於Java Web Start,Java管理擴充元件(Java Management Extensions,JMX)管理代理以及用於處理XML資料的函數中。
|-
|Java SE 5 Update 17
|2008-12-03
|更新了UTF-8字符集,實作以處理非最短形式的UTF-8字節序列,從而引入了與以前版本不相容的問題。 添加了新的根憑證。 許多漏洞被修復。
|-
|Java SE 5 Update 18
|2009-03-25
|幾個安全上的問題已解決。 稍微修改了在LDAP目錄中存取Java物件的行為的JNDI功能。 增加了五個新的根憑證。 許多漏洞被修復。
|-
|Java SE 5 Update 19
|2009-05-29
|為多個系統配置增加支援。 增加了服務標籤(Service Tag)支持。 許多漏洞被修復,包括幾個崩潰和記憶體洩漏。
|-
|Java SE 5 Update 20
|2009-08-06
|解決了幾個安全漏洞,例如不受信任的小程式的潛在系統訪問,以及圖像處理和Unpack200中的整數溢出。 添加了幾個新的根憑證。 許多其它小漏洞已修復。
|-
|Java SE 5 Update 21
|2009-09-09
|許多小漏洞被修復。
|-
|Java SE 5 Update 22
|2009-11-04
|此版本標記Java 5的End Of Service Life(EOSL),並且是其最終的公開版本。 在報告Sun Alerts 269868、270474、270475和270476中的幾個安全漏洞已修復。 其他幾個漏洞已修復。 此外,還增加了兩個新的根憑證。
|}


== Java SE 6 ==
== Java SE 6 ==
第114行: 第226行:
在發展階段,新版本大概每周都釋出包括一些功能增強和漏洞的修復。Beta 版本在2006 年 2 月和 6 月釋出,也就是為什麼 2006 年 12 月 11 日變成最終的版本。
在發展階段,新版本大概每周都釋出包括一些功能增強和漏洞的修復。Beta 版本在2006 年 2 月和 6 月釋出,也就是為什麼 2006 年 12 月 11 日變成最終的版本。
這個版本中包含的主要變化︰
這個版本中包含的主要變化︰

本版本包含的主要更改:<ref name="pr16">[http://www.sun.com/smi/Press/sunflash/2006-12/sunflash.20061211.1.xml Version 1.6 press release].</ref><ref name="ch16">[http://java.sun.com/javase/6/features.jsp Version 1.6 full list of changes].</ref>
* 支持舊的Win9x版本下降; 非正式地,Java 6 Update 7是Java的最後一個顯示為在這些版本的Windows上工作的版本。 這被認為是因為在Update 10版本中的主要更改。
* 腳本語言支持(Scripting Language Support)(JSR 223):用於與腳本語言緊密整合的通用API,以及內建的Mozilla JavaScript Rhino整合。
* 核心平台<ref name="lobby">[http://www.javalobby.org/java/forums/t66270.html Java Lobby].</ref><ref name="weblog">[http://weblogs.java.net/blog/opinali/archive/2005/11/mustangs_hotspo.html Mustang's HotSpot], Sun weblogs.</ref>和Swing性能顯著的改進。
* 透過 [[JAX-WS]] 改善的網路服務支援(JSR 224).
* 支援 [[Java数据库连接|JDBC]] 4.0 ([[Java数据库连接|JSR 221]]).
* Java 編譯器 API (JSR 199):允許Java程式以寫程式的方式選擇和呼叫Java編譯器的API。
* 將JAXB升級到版本2.0:包括StAX解析器的整合。
* 支持 pluggable [[Java注解|annotations]] (JSR 269).<ref>{{Cite web|url=https://blogs.oracle.com/darcy/entry/an_apt_replacement|title=An apt replacement|accessdate=2009-07-29|date=2008-08-03|last=Darcy|first=Joe}}</ref>
* 改善許多 [[图形用户界面|GUI]] ,像是SwingWorker在API中的整合,表格排序和篩選,以及真正的Swing雙緩衝(消除模糊區域效果)。
* 包含 [[Java虚拟机|JVM]] 改善:同步和編譯器性能優化,新演算法和對現有垃圾收集演算法的升級以及應用程序啟動性能。{{By whom|date=November 2011}}
Java 6可以安裝到在64位(Core 2 Duo和更高版本)處理器機器上運行的Mac OS X 10.5(Leopard)。<ref>{{Cite web|url=https://gephi.org/users/install-java-6-mac-os-x-leopard/|title=Install Java 6 on Mac OS X Leopard &#124; Gephi, open source graph visualization software|accessdate=2016-09-30|publisher=Gephi.org}}</ref> 運行Mac OS X 10.6(Snow Leopard)的32位和64位機器也支援Java 6。

Java 6在2013年2月到了它支援生命週期的尾聲,此時所有公開更新(包括安全更新)都計劃停止。<ref>{{Cite web|url=http://www.oracle.com/technetwork/java/eol-135779.html|title=Oracle Java SE Support Roadmap|accessdate=22 Oct 2012|date=19 Sep 2012|publisher=[[Oracle Corporation]]}}</ref><ref>{{Cite web|url=http://www.oracle.com/technetwork/java/javase/7u15-relnotes-1907738.html|title=Auto-update and update through Java Control Panel of JRE 6 will replace JRE 6 with JRE 7|accessdate=2 Mar 2013|date=19 Feb 2013|publisher=[[Oracle Corporation]]}}</ref> Oracle在2013年3月和4月發布了另外兩個對Java 6的更新,修補了一些安全漏洞。<ref>{{Cite web|url=http://www.oracle.com/technetwork/java/javase/6u43-relnotes-1915290.html|title=Java™ SE Development Kit 6, Update 43 Release notes|accessdate=4 Mar 2013|date=4 Mar 2013|publisher=[[Oracle Corporation]]}}</ref><ref>{{Cite web|url=http://www.oracle.com/technetwork/java/javase/6u43-relnotes-1915290.html|title=Java™ SE Development Kit 6, Update 45 Release notes|accessdate=4 Mar 2013|date=4 Mar 2013|publisher=[[Oracle Corporation]]}}</ref>


=== Java 6 更新 ===
=== Java 6 更新 ===
JAVA 6 釋出後,Sun和後來的Oracle之後,釋出了幾個更新,而不更改任何公開的 API,增強了終端使用者的可用性或固定的漏洞。自 2016 年 1 月,JAVA 6 (和更早)的 版本將不再可從 Oracle下載。
JAVA 6 釋出後,Sun和後來的Oracle之後,釋出了幾個更新,而不更改任何公開的 API,增強了終端使用者的可用性或固定的漏洞。自 2016 年 1 月,JAVA 6 (和更早)的版本將不再可從 Oracle下載。
<ref name="ReferenceC">https://java.com/en/download/faq/java_7.xml</ref>
<ref name="ReferenceC">https://java.com/en/download/faq/java_7.xml</ref>


第133行: 第260行:
:* 允許在數值文本底線<ref>{{cite web|url=http://download.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html|title=Underscores in Numeric Literals|accessdate=2013-01-15|date=|publisher=Download.oracle.com}}</ref>
:* 允許在數值文本底線<ref>{{cite web|url=http://download.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html|title=Underscores in Numeric Literals|accessdate=2013-01-15|date=|publisher=Download.oracle.com}}</ref>
:* 抓住許多個例外(exception)類型,並使用改進的類型檢查重新丟出例外<ref>{{cite web|url=http://download.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html|title=Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking|accessdate=2013-01-15|date=|publisher=Download.oracle.com}}</ref>
:* 抓住許多個例外(exception)類型,並使用改進的類型檢查重新丟出例外<ref>{{cite web|url=http://download.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html|title=Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking|accessdate=2013-01-15|date=|publisher=Download.oracle.com}}</ref>
* JSR 166下的並發實用工具<ref>{{Cite web|url=http://gee.cs.oswego.edu/dl/concurrency-interest/index.html|title=Concurrency JSR-166|accessdate=2010-04-16}}</ref>
* 新的檔案 [[I/O]] 程式庫 (JSR 203 定義) 增加多重檔案的支援、檔案原始資料和符號鏈接。新的套件為: <tt>java.nio.file</tt>, <tt>java.nio.file.attribute</tt> and <tt>java.nio.file.spi</tt><ref>{{Cite web|url=http://java.sun.com/docs/books/tutorial/essential/io/fileio.html|title=File I/O (Featuring NIO.2)|accessdate=2013-01-15|date=2008-03-14|publisher=Java.sun.com}}</ref><ref>{{Cite web|url=http://java.sun.com/docs/books/tutorial/essential/io/legacy.html|title=Legacy File I/O Code|accessdate=2013-01-15|date=2012-02-28|publisher=Java.sun.com}}</ref>
* Timsort 被用來排序物件的集合和陣列,取代 [[归并排序|merge sort]]
* 對 [[椭圆曲线密码学|elliptic curve cryptography]] 演算法程式庫等級的支援
* 一個給 Java 2D 的 XRender 傳遞途徑,改進了現代 [[圖形處理器|GPUs]] 特有的功能的處理
* 用於圖形功能的新平台API(最初在版本6u10中的實作為不支援的API)<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/features/#f650|title=JDK 7 Features|accessdate=2013-03-15|date=2011-07-28|publisher=OpenJDK}}</ref>
* 增強了對新網路通訊協定(包括SCTP和Sockets Direct Protocol)的程式庫等級的支持
* [[上游 (軟體開發)|Upstream]] 對 [[XML]] 和 [[Unicode]] 的更新
* Java 部署規則集<ref>https://blogs.oracle.com/java-platform-group/entry/introducing_deployment_rule_sets</ref>


=== Java 7 更新 ===
=== Java 7 更新 ===
Oracle 直到 2015 年 4 月產品已經達到支援生命週期<ref>{{Cite web|url=http://www.oracle.com/technetwork/java/javase/downloads/eol-135779.html|title=Oracle Java SE Support Roadmap|accessdate=2015-01-07|date=2014-12-19|publisher=Oracle Corporation}}</ref>快結束時才發布 JAVA 7 家族每季的公開更新<ref>[http://www.oracle.com/technetwork/topics/security/alerts-086861.html Critical Patch Update table shows four dates per year]</ref>
Oracle 直到 2015 年 4 月產品已經達到支援生命週期快結束時才發布 JAVA 7 家族每季的公開更新。


== {{Anchor}} Java SE 8 ==
== {{Anchor}} Java SE 8 ==
第143行: 第279行:
* JSR 335, JEP 126:語言等級對於 [[匿名函数|lambda expressions]] 的支持(官方的, lambda expressions; 非官方的, [[闭包 (计算机科学)|closures]]) 在Lambda專案之下<ref>{{cite web|url=http://openjdk.java.net/projects/jdk7/features/#f700|title=Java 7 Features|accessdate=2010-04-16|date=2010-02-09|publisher=Sun Microsystems}}</ref> 且預設方法(虛擬擴充元件方法)<ref name="goetz_interface_evolution">{{cite web|url=http://wiki.jvmlangsummit.com/images/7/71/2011_Goetz_Extension.pdf|title=Interface evolution via virtual extension methods|accessdate=2014-03-27|date=2011-07-20|publisher=Brian Goetz}}</ref><ref>{{cite web|url=https://www.jcp.org/en/jsr/proposalDetails?id=335|title=Lambda Expressions for the JavaTM Programming Language|accessdate=2014-03-27|date=2012-10-23|publisher=Brian Goetz}}</ref><ref>{{cite web|url=http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html|title=The Java Tutorials: Default Methods|accessdate=2014-03-27|publisher=Oracle}}</ref> ,允許新增的方法接介而不用破壞掉現存的實作。有個在Java社群中正在進行的辯論在辯論是否要加入支援 lambda 運算式。於是Sun公司宣布 lambda 運算式將會播包含在Java裡,然後請社群協助輸入和重新定義功能。支援lambda表示式,也允許在功能性樣式運作在元素串流上的表現,像是 MapReduce 啟發在集合上的變形。預設的方法允許API作者使用它添加新的方法到介面上,而不會破壞舊的程式碼中。雖然它不是他們主要的用意,預設方法還允許多重繼承的行為 (但不是狀態)。
* JSR 335, JEP 126:語言等級對於 [[匿名函数|lambda expressions]] 的支持(官方的, lambda expressions; 非官方的, [[闭包 (计算机科学)|closures]]) 在Lambda專案之下<ref>{{cite web|url=http://openjdk.java.net/projects/jdk7/features/#f700|title=Java 7 Features|accessdate=2010-04-16|date=2010-02-09|publisher=Sun Microsystems}}</ref> 且預設方法(虛擬擴充元件方法)<ref name="goetz_interface_evolution">{{cite web|url=http://wiki.jvmlangsummit.com/images/7/71/2011_Goetz_Extension.pdf|title=Interface evolution via virtual extension methods|accessdate=2014-03-27|date=2011-07-20|publisher=Brian Goetz}}</ref><ref>{{cite web|url=https://www.jcp.org/en/jsr/proposalDetails?id=335|title=Lambda Expressions for the JavaTM Programming Language|accessdate=2014-03-27|date=2012-10-23|publisher=Brian Goetz}}</ref><ref>{{cite web|url=http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html|title=The Java Tutorials: Default Methods|accessdate=2014-03-27|publisher=Oracle}}</ref> ,允許新增的方法接介而不用破壞掉現存的實作。有個在Java社群中正在進行的辯論在辯論是否要加入支援 lambda 運算式。於是Sun公司宣布 lambda 運算式將會播包含在Java裡,然後請社群協助輸入和重新定義功能。支援lambda表示式,也允許在功能性樣式運作在元素串流上的表現,像是 MapReduce 啟發在集合上的變形。預設的方法允許API作者使用它添加新的方法到介面上,而不會破壞舊的程式碼中。雖然它不是他們主要的用意,預設方法還允許多重繼承的行為 (但不是狀態)。


* JSR 223, JEP 174:Nashorn專案, 一個 JavaScript runtime which allows developers to embed JavaScript code within applications
* JSR 223, JEP 174:Nashorn專案, 一個 JavaScript 運行期間,它允許開發人員嵌入JavaScript 程式碼在應用程式中 
* JSR 308, JEP 104:在 Java 型別上的註解<ref>http://openjdk.java.net/jeps/104</ref>
* JSR 308, JEP 104:在 Java 型別上的註解<ref>http://openjdk.java.net/jeps/104</ref>
* 沒有符號的整數算術<ref>https://blogs.oracle.com/darcy/entry/unsigned_api</ref>
* 沒有符號的整數算術<ref>https://blogs.oracle.com/darcy/entry/unsigned_api</ref>

2017年1月11日 (三) 23:56的版本

Java語言JDK 1.0版本以來經歷了多次更改,也大量在基本的程式庫中增加了類別和套件。自J2SE 1.4開始,Java語言的演變受Java Community Process(JCP)的約束,JCP使用Java規範請求(Java Specification Requests,JSRs)來建議和定義對Java平台的添加和編修。Java語言由Java語言規範(Java Language Specification,JLS)定義,對JLS的更改則根據JSR 901管理。

除了語言上變化,多年來對Java類別庫(JCL)進行了更加戲劇性的改變,從JDK 1.0中的幾百個類別增長到J2SE 5中的三千多個類別。全新的API,像是Swing和Java2D皆已經啟用,許多原來的JDK 1.0類別和方法卻已被拋棄使用。當然,仍然有一些程式可以將Java程式從新版本的Java平台轉換為較舊版本(例如Java 5.0降轉到1.4)(可參考Java backporting tools)。 

在Java 7發布之後,Oracle承諾回到以前每兩年發布一次的發布週期。但是,在2013年時,Oracle卻宣布他們將Java 8延遲一年,為了修復與Java安全漏洞。 

Java 8是唯一公開支援的版本,而在舊版本的公開支援期間結束後,已經為Java 7和其它更早的版本發布了非公開的更新。

版本 年份
JDK Beta 1994
JDK 1.0 1996
JDK 1.1 1997
J2SE 1.2 1998
J2SE 1.3 2000
J2SE 1.4 2002
J2SE 5.0 2005
Java SE 6 2006
Java SE 7 2011
Java SE 8 2014

JDK Alpha 和 Beta

第一個1995年發布的alpha和beta Java公開版本的APIABI非常不穩定。 支援Java Web瀏覽器被取名為WebRunner。

JDK 1.0

第一個版本於1996年1月23日發布,叫做為Oak[1]。而真正第一個穩定的版本 JDK 1.0.2,被稱作Java 1。

JDK 1.1

1997年2月19日發布的新增功能,主要包括:[2]

  • AWT事件模型大規模重新編製
  • 加入了內部類別
  • JavaBeans
  • JDBC
  • RMI
  • 能夠支援自理的反射能力,在運行時不可能有修改。
  • 由Symantec為JavaSoft生產的即時編譯器,能夠在Microsoft Windows平台上運作。
  • 支持 Internationalization 和 Unicode ,源自於Taligent[3]

J2SE 1.2

代號為Playground。 這個在1998年12月8日的發布的版本和其到J2SE 5.0的後續版本被重改名為Java 2,而版本名稱「J2SE」(Java 2平台,標準版)取代JDK以區別出來自J2EE(Java 2平台,企業版) 和J2ME(Java 2 Platform,Micro Edition)的基礎平台。

這是Java的一個非常重要的版本,因為它將Java平台的大小增加了三倍,在59個程式包中達到了1520個類別。 主要增加包括:[4]

J2SE 1.3

代號為Kestrel。在2000年5月8日發布的版本中最著名的改變包括:[5][6]

  • 包含了HotSpot JVM(HotSpot JVM第一次被發布是在1999年4月,名為J2SE 1.2 JVM)
  • 為了支援與CORBA的選擇相容性而修改了RMI
  • Java命名和目錄接口(Java Naming and Directory Interface,縮寫JNDI)包含在主程式庫中(先前為擴充元件的形式)
  • Java Platform Debugger Architecture (JPDA)
  • JavaSound
  • Synthetic proxy類別

J2SE 1.4

代號為Merlin。2002年2月6日釋出了JSR 59,是第一個在JCP下開發的Java平臺。主要的變化包括︰[7][8]

  • 語言上的改變
  • 程式庫的改善
    • 仿照Perl正規表示式
    • 異常鏈[允許一個例外狀況來封裝原始較低級別的例外狀況
    • 支援Internet Protocol version 6 (IPv6)
    • 非阻塞性的 IO(取名為 New Input/Output, NIO)(在 JSR 51 中被指定)
    • 日誌API (在JSR 47中被指定)
    • 影像 I/O API來存取和寫入一些格式像是JPEG和PNG的圖片
    • 整合了XML解析器和XSLT處理器(JAXP)(指定在JSR 5JSR 63
    • 整合安全和加密擴充元件(JCE, JSSE, JAAS)
    • 包含了Java Web Start (Java Web Start 在2001年3月第一次被釋出為J2SE 1.3) (指定在JSR 56)
    • 偏好設定 API (java.util.prefs)

Java 1.4開放支源和安全性更新於2008年10月終止。Oracle客戶的付費的安全性更新也在2013年2月結束。[9]

J2SE 5.0

代號為Tiger。這個在2004年9月30日釋出的版本原本以1.5編號,也就是仍然使用內部版本編號。這個數字輩改變是為了「更好地反映成熟度、穩定性、可擴充性和 J2SE 的安全水準」。這個版本是在JSR 176底下被開發。


J2SE 5.0 在 2008 年 4 月 8 日進入其即將停止公開更新的期間;2009 年 11 月 3 日正式不公開開放更新。Oracle 客戶直到 2015 年 5 月都能透過付費的方式取得更新 。  [10]

Tiger 增加了若干個重要的新語言功能。[11][12]

  • 泛形(Generics)︰ 為集合提供編譯期間 (靜態) 型別安全,且不須為大多數類型轉換 (型別轉換) (規範在 JSR 14)
  • 中繼資料(Metadata)︰ 也稱作注釋。讓語言結構(像是類別和方法)能夠用額外的資料標記,可以由中繼資料意識工具處理(規範在 JSR 175)
  • 自動封裝與解封裝︰ 在基本的資料型別(如 int)和基本的的外覆類別 (如 Integer) 之間能夠自動轉換 (規範在 JSR 201)
  • 枚舉(Enumerations)︰ 以 enum 關鍵字創造出一種型別安全,有排序值的清單(如 Day.MONDAY、 Day.TUESDAY 等);以前這只能透過非型別安全的恒定整數或自行撰寫的類別來達成 (型別安全的枚舉模式) (規範在 JSR 201)
  • 可變參數函數(Varargs):方法的最後一個參數現在可以用一個類型名稱加上三個點宣告(如:void drawtext(String... lines));在調用代碼中,型別中參數裡任何的數字可以被使用,而它們再放在一個陣列來傳遞給方法,或是其它的調用代碼可以傳遞那個型別的陣列
  • 強化 for each 迴圈:for 迴圈的語法被用特別的語法擴充了,以不是陣列就是其它 Iterable重複每個成員,像是基本的 Collection 類別 (規範在 JSR 201)
  • 改進多執行緒JAVA 程式的執行語義;新的 JAVA 記憶體模組解決問題的複雜性、 有效性和以前的規格性能[13]
  • 匯入靜態類別

另外也有以下這些對於基本程式庫的改善:

Java 5是Java的最後一個正式支援Microsoft Windows 98和Windows ME的版本[15],而Windows Vista是J2SE 5在2009年10月的Java 5生命週期之前支援的Windows的最新版本。

Java 5 Update 5(1.5.0_05)是Java在Windows 95(裝了Internet Explorer 5.5 的)和Windows NT 4.0上運行的最後一個版本。[16]

JAVA 5 最初出現在蘋果 Mac OS X 10.4 (Tiger),到了蘋果 Mac OS X 10.5 (Leopard)時成為了預設的 JAVA 版本。

版本控制系統的改變

此版本推出了 JAVA 語言中,一個新的版本控制系統,而舊版本控制系統仍然可以在開發者資源庫中繼續使用。

Both version numbers "1.5.0" and "5.0" are used to identify this release of the Java 2 Platform Standard Edition. Version "5.0" is the product version, while "1.5.0" is the developer version. The number "5.0" is used to better reflect the level of maturity, stability, scalability and security of the J2SE.

這種對應關係持續維持到以後的版本 (Java 6 = JDK 1.6, Java 7 = JDK 1.7, 以此類推).

Java 5 更新

版本 釋出日期 重點
Java SE 5 2004-10-4 Metadata、泛型型別、對基礎型別自動封裝和自動解封裝、 加強 for 迴圈、 枚舉的類型、 靜態類別匯入,格式化 I/O、 varargs 和併發的實用工具。改進的啟動時間和記憶體佔用量。在多個正在運行的 Jvm 之間共用的唯讀資料。 遠端監控和管理。一個新的 JVM 配置 API。程序化的堆疊版本追蹤。支持對 XML 1.1 的命名空間、 XML 架構、 SAX 2.0.2,DOM 級別 3,與 XSLT 1.1 快速的 XLSTC 的編譯器。Unicode 4.0 支援。
Java SE 5 Update 1 2004-12-25 50 個漏洞修復
Java SE 5 Update 2 2005-03-16 一些中斷的修復。程式現在以較客製化的方式編譯。日曆漏洞修復和其它漏洞修復。
Java SE 5 Update 3 2005-05-03 這個版本修復了一些漏洞,包含在Linux Mozilla外掛的中斷。
Java SE 5 Update 4 2005-07-04 在這個版本中,J2SE對於64位元Windows的支持從候選版本中脫穎而出。這個版本在AMD64/EM64T 64位元模式運行用Windows Server 2003 x64 版本的機器。
Java SE 5 Update 5 2005-09-18 修復了一些漏洞以及表現增強。對Windows 95 和 Windows NT 4.0 最後的更新。
Java SE 5 Update 6 2005-12-07 在這個版本之前,Java小程式或應用程式可以決定想要運行的JRE版本,但從這個更新之後就不再是這樣了。所有的程式都用最新版本的JRE運行。
Java SE 5 Update 7 2006-05-29 修復了幾個漏洞並提高性能。
Java SE 5 Update 8 2006-08-13 修復了一些漏洞以及提高了性能。
Java SE 5 Update 9 2006-11-12 這個版本修復了一些小回歸。
Java SE 5 Update 10 2006-12-22 添加了由Linux 2.6支持的epoll I/O事件通知工具的實作。 許多漏洞被修復。
Java SE 5 Update 11 2007-03-08 修復了幾個漏洞並提高了性能。
Java SE 5 Update 12 2007-06-11
Java SE 5 Update 13 2007-10-05 Java Web Start中與本地文件存取相關的多個安全漏洞已修復。 修復了允許繞過網路進入限制的JRE中的安全漏洞。 修復其他幾個安全問題和小錯誤。
Java SE 5 Update 14
Java SE 5 Update 15 2008-03-06 修復因緩衝堆超出邊界而導致的幾個崩潰漏洞以及其他一些小漏洞。 現在來自AOL,DigiCert和TrustCenter的新的根憑證已經被包含在內。
Java SE 5 Update 16 2008-07-23 此版本修復了幾個安全漏洞,例如DoS漏洞,緩衝區溢出和其他可能導致崩潰的漏洞,或是會給程式存取某些系統資源。 這些漏洞位於Java Web Start,Java管理擴充元件(Java Management Extensions,JMX)管理代理以及用於處理XML資料的函數中。
Java SE 5 Update 17 2008-12-03 更新了UTF-8字符集,實作以處理非最短形式的UTF-8字節序列,從而引入了與以前版本不相容的問題。 添加了新的根憑證。 許多漏洞被修復。
Java SE 5 Update 18 2009-03-25 幾個安全上的問題已解決。 稍微修改了在LDAP目錄中存取Java物件的行為的JNDI功能。 增加了五個新的根憑證。 許多漏洞被修復。
Java SE 5 Update 19 2009-05-29 為多個系統配置增加支援。 增加了服務標籤(Service Tag)支持。 許多漏洞被修復,包括幾個崩潰和記憶體洩漏。
Java SE 5 Update 20 2009-08-06 解決了幾個安全漏洞,例如不受信任的小程式的潛在系統訪問,以及圖像處理和Unpack200中的整數溢出。 添加了幾個新的根憑證。 許多其它小漏洞已修復。
Java SE 5 Update 21 2009-09-09 許多小漏洞被修復。
Java SE 5 Update 22 2009-11-04 此版本標記Java 5的End Of Service Life(EOSL),並且是其最終的公開版本。 在報告Sun Alerts 269868、270474、270475和270476中的幾個安全漏洞已修復。 其他幾個漏洞已修復。 此外,還增加了兩個新的根憑證。

Java SE 6

代號為Mustang。版本發佈於 2006 年 12 月 11 日,Sun 把原本的名稱「J2SE」改為「Java SE」,然後再從版本號中去掉「.0」[18],而開發者內部編號仍然是1.6.0。[19]這個版本是根據 JSR 270 開發的。

在發展階段,新版本大概每周都釋出包括一些功能增強和漏洞的修復。Beta 版本在2006 年 2 月和 6 月釋出,也就是為什麼 2006 年 12 月 11 日變成最終的版本。 這個版本中包含的主要變化︰

本版本包含的主要更改:[20][21]

  • 支持舊的Win9x版本下降; 非正式地,Java 6 Update 7是Java的最後一個顯示為在這些版本的Windows上工作的版本。 這被認為是因為在Update 10版本中的主要更改。
  • 腳本語言支持(Scripting Language Support)(JSR 223):用於與腳本語言緊密整合的通用API,以及內建的Mozilla JavaScript Rhino整合。
  • 核心平台[22][23]和Swing性能顯著的改進。
  • 透過 JAX-WS 改善的網路服務支援(JSR 224).
  • 支援 JDBC 4.0 (JSR 221).
  • Java 編譯器 API (JSR 199):允許Java程式以寫程式的方式選擇和呼叫Java編譯器的API。
  • 將JAXB升級到版本2.0:包括StAX解析器的整合。
  • 支持 pluggable annotations (JSR 269).[24]
  • 改善許多 GUI ,像是SwingWorker在API中的整合,表格排序和篩選,以及真正的Swing雙緩衝(消除模糊區域效果)。
  • 包含 JVM 改善:同步和編譯器性能優化,新演算法和對現有垃圾收集演算法的升級以及應用程序啟動性能。[誰說的?]

Java 6可以安裝到在64位(Core 2 Duo和更高版本)處理器機器上運行的Mac OS X 10.5(Leopard)。[25] 運行Mac OS X 10.6(Snow Leopard)的32位和64位機器也支援Java 6。

Java 6在2013年2月到了它支援生命週期的尾聲,此時所有公開更新(包括安全更新)都計劃停止。[26][27] Oracle在2013年3月和4月發布了另外兩個對Java 6的更新,修補了一些安全漏洞。[28][29]

Java 6 更新

JAVA 6 釋出後,Sun和後來的Oracle之後,釋出了幾個更新,而不更改任何公開的 API,增強了終端使用者的可用性或固定的漏洞。自 2016 年 1 月,JAVA 6 (和更早)的版本將不再可從 Oracle下載。 [30]

Java SE 7

 JAVA 7 (代號Dolphin[31]) 是一個重大的更新,在 2011年7月7日亮相[32],並在2011年7月28日開放給開發者。[33]發展時期被分類成十三的里程碑,在2011年6月6日完成了最後的十三個里程碑。[34][35]以平均來看,每個里程碑會產出8個版本(就是一般包括的功能增強和漏洞修復) 。在 OpenJDK 7 專案中的功能清單中列出了很多的改變。

在 Java 7 中新增的功能包括:[36]

  • 動態語言支援JVM,以新的 invokedynamic bytecode 在標準 JSR-292 之下[37] ,跟隨著最近完成的雛形作品 Multi Language Virtual Machine
  • 壓縮了 64 位元的指標[38] (在Java 6可以被使用以 XX:+UseCompressedOops 的方式)[39]
  • 這些小語言的改變(在名為Coin專案下的一個小群體):[40]
  • 在 switch 中的字串[41]
  • 在 try 敘述裡的自動化的資源管理[42]
  • 改善類型推論針對一般的實例創作,又稱作 the diamond operator <>[43]
  • 簡化了varargs方法的宣告[44]
  • 二進位整數[45]
  • 允許在數值文本底線[46]
  • 抓住許多個例外(exception)類型,並使用改進的類型檢查重新丟出例外[47]
  • JSR 166下的並發實用工具[48]
  • 新的檔案 I/O 程式庫 (JSR 203 定義) 增加多重檔案的支援、檔案原始資料和符號鏈接。新的套件為: java.nio.file, java.nio.file.attribute and java.nio.file.spi[49][50]
  • Timsort 被用來排序物件的集合和陣列,取代 merge sort
  • elliptic curve cryptography 演算法程式庫等級的支援
  • 一個給 Java 2D 的 XRender 傳遞途徑,改進了現代 GPUs 特有的功能的處理
  • 用於圖形功能的新平台API(最初在版本6u10中的實作為不支援的API)[51]
  • 增強了對新網路通訊協定(包括SCTP和Sockets Direct Protocol)的程式庫等級的支持
  • Upstream 對 XMLUnicode 的更新
  • Java 部署規則集[52]

Java 7 更新

Oracle 直到 2015 年 4 月產品已經達到支援生命週期快結束時才發布 JAVA 7 家族每季的公開更新。

Java SE 8

Java 8 於2014年3月18日釋出,[53][54] 包含了一些原本被計畫在 Java 7卻延遲的功能。[55]

繼續工作在被組織過的功能以 JDK Enhancement Proposals (JEPs) 的角度[56]

  • JSR 335, JEP 126:語言等級對於 lambda expressions 的支持(官方的, lambda expressions; 非官方的, closures) 在Lambda專案之下[57] 且預設方法(虛擬擴充元件方法)[58][59][60] ,允許新增的方法接介而不用破壞掉現存的實作。有個在Java社群中正在進行的辯論在辯論是否要加入支援 lambda 運算式。於是Sun公司宣布 lambda 運算式將會播包含在Java裡,然後請社群協助輸入和重新定義功能。支援lambda表示式,也允許在功能性樣式運作在元素串流上的表現,像是 MapReduce 啟發在集合上的變形。預設的方法允許API作者使用它添加新的方法到介面上,而不會破壞舊的程式碼中。雖然它不是他們主要的用意,預設方法還允許多重繼承的行為 (但不是狀態)。
  • JSR 223, JEP 174:Nashorn專案, 一個 JavaScript 運行期間,它允許開發人員嵌入JavaScript 程式碼在應用程式中 
  • JSR 308, JEP 104:在 Java 型別上的註解[61]
  • 沒有符號的整數算術[62]
  • JSR 337, JEP 120:重複註解[63]
  • JSR 310, JEP 150:日期和時間 API[64]
  • JEP 178:靜態連結 JNI 程式庫[65]
  • JEP 153:啟用JavaFX 應用程式 (直接啟用 JavaFX 的應用程式 JARs)[66]
  • JEP 122:移除了 permanent generation[67]

Java 8 不再支援 Windows XP[68] ,但JDK 8 第 25 版更新仍然可以在 Windows XP安裝和運行。[69] 先前JDK 8的更新版本可以在XP中運行,但必須被安裝在一個被直接解壓縮檔案強制安裝來自安裝執行檔。

從2014年10月開始,Java 8已經是官方網站上預設的下載版本。[70]

Java 8 更新

版本 釋出日期 重點
Java SE 8 2014-03-18 初始版本
Java SE 8 Update 5[71] 2014-04-15 使用「*」在 Caller-Allowable-Codebase 屬性中; 11個漏洞的修補
Java SE 8 Update 11[72] 2014-07-15 Java 依賴性分析工具(Java Dependency Analysis Tool); Java 控制台選項以禁用贊助者; JAR 檔案屬性 – Entry-Point; JAXP 處理限制屬性 – maxElementDepth; 18 個安全性漏洞修補,[73] 15 個漏洞修補
Java SE 8 Update 20[74] 2014-08-19 669 個漏洞修補,[75] JMC 5.4, 字串重複數據刪除(預設為不啟用)
Java SE 8 Update 25[76] 2014-10-14 10 個漏洞修補
Java SE 8 Update 31[77] 2015-01-19 26 個漏洞修補; SSLv3 (預設為禁用)
Java SE 8 Update 40[78] 2015-03-03 645 個漏洞修補,[79] 加入「記憶體壓力」的概念來協助指出有多少的系統記憶體還能夠使用(低壓 = 高記憶體, 高壓 = 低記憶體)
Java SE 8 Update 45[80] 2015-04-14 13 個漏洞修補
Java SE 8 Update 51[81] 2015-07-14 增加對WIndows平台的原生沙盒的支援(預設為禁用); 另外還有 25 個安全性修補,14 個漏洞修補
Java SE 8 Update 60[82] 2015-08-18 480 個漏洞修補[83]
Java SE 8 Update 65[84] 2015-10-20 25 個安全性修補, 3 個漏洞修補
Java SE 8 Update 66[85] 2015-11-16 15 個漏洞修補
Java SE 8 Update 71[86] 2016-01-19 8 個安全性修補, 5 個漏洞修補[87]
Java SE 8 Update 72 2016-01-19 8 個安全性修補, 5 個漏洞修補, 許多的增強
Java SE 8 Update 73[88] 2016-02-03 1 個安全性修補
Java SE 8 Update 74[89] 2016-02-03 1 個安全性修補
Java SE 8 Update 77[90] 2016-03-23 1 個安全性修補
Java SE 8 Update 91[91] 2016-04-19 9 個安全性修補, 4 個漏洞修補和增強
Java SE 8 Update 92[92] 2016-04-19 來自8u91的安全性和漏洞修補, 再加上 76 個額外的漏洞消補; 推出 ExitOnOutOfMemoryErrorCrashOnOutOfMemoryError 標籤
Java SE 8 Update 101[93] 2016-07-19 來自8u92的安全性和漏洞修補, 再加上 9個額外的漏洞消補
Java SE 8 Update 102[94] 2016-07-19 來自8u101的安全性和漏洞修補, 再加上 118 個額外的漏洞消補
Java SE 8 Update 111[95] 2016-10-18 安全性修補和 9 個漏洞修補
Java SE 8 Update 112[96] 2016-10-18 新增功能和139個漏洞修補在8u111

Java SE 9

在2011年的JavaOne中,Oracle討論了一些他們希望在2016年釋出Java 9的功能,[97]包含對於多GB級堆疊更好的支援,更好的原生原始碼整合性,還有能夠自我協調(Self-tuning)的JVM.[98] 在2016年初,Java 9的釋出日期被改到了2017年3月,又被拖延了4個月到2017年7月。[99]

  • JSR 376:在Jigsaw專案中將JDK模組化 (Java Module System)[100][101][102]
  • JEP 222:jshell:Java的Shell (是個 Java REPL)[103][104]
  • JEP 295:Ahead-of-Time Compilation[105]
  • JEP 268:XML Catalogs[106]

工作正在進行之中,使 JAVA 執行的反應流部分的 JAVA 9︰JSR 166 的領導者 Doug Lea提出了一個新的「Flow」類別,將包括目前的反應流提供的介面。這項工作被記錄下︰

  • JEP 266:更多的併發更新[107]

有些計畫是要加入自動並行( automatic parallelization),採用OpenCL技術。[108]

Java SE 10

已經有推測將會啟用一種沒有身分識別的物件(數值型態)。[109][110] 以及走向 64 位定址陣列來支援大型資料集。

實際開始製作

OpenJDK 是一個自由開放源始碼軟體實作在Java Platform, Standard Edition (Java SE)

在OpenJDK之前,許多各式各樣不同的公司和組織推出好幾個免費的Java實作。其中一個例子是Apache Harmony。 IBM也有提供Java實作,而RedHat則是通過IcedTea專案提供它:一個用於OpenJDK的架構和整合專案。

參考文獻

  1. ^ JAVASOFT SHIPS JAVA 1.0,存档于互联网档案馆(存檔日期 March 10, 2007)
  2. ^ Version 1.1 press release, Sun.
  3. ^ Taligent prepares internationalisation technology for the big time
  4. ^ Version 1.2 press release, Sun.
  5. ^ Version 1.3 press release, Sun.
  6. ^ Version 1.3 full list of changes, Sun.
  7. ^ Version 1.4 press release.
  8. ^ Version full 1.4 list of changes.
  9. ^ Java™ 2 Platform 5.0 and Java for Business 5.0. Oracle Corporation. 2010 [22 Oct 2012]. 
  10. ^ Oracle Java SE Support Roadmap
  11. ^ Version 1.5 press release.
  12. ^ Version 1.5 full list of changes.
  13. ^ JSR 133, 2.4 Why isn't this need met by existing specifications?. Oracle. 
  14. ^ Goetz, Brian. Java Concurrency in Practice. Addison-Wesley. 2006: xvii. ISBN 0-321-34960-1. 
  15. ^ Java 5.0 is no longer available on Java.com. Java.com. 2009-11-03 [2016-09-30]. 
  16. ^ Lineback, Nathan. Misc Windows 2 – Nathan's Toasty Technology page. [2016-09-30]. 
  17. ^ Version 1.5.0 or 5.0?. Oracle.com. [18 April 2016]. 
  18. ^ Java brand naming.
  19. ^ Version 6, Java webnotes, Sun.
  20. ^ Version 1.6 press release.
  21. ^ Version 1.6 full list of changes.
  22. ^ Java Lobby.
  23. ^ Mustang's HotSpot, Sun weblogs.
  24. ^ Darcy, Joe. An apt replacement. 2008-08-03 [2009-07-29]. 
  25. ^ Install Java 6 on Mac OS X Leopard | Gephi, open source graph visualization software. Gephi.org. [2016-09-30]. 
  26. ^ Oracle Java SE Support Roadmap. Oracle Corporation. 19 Sep 2012 [22 Oct 2012]. 
  27. ^ Auto-update and update through Java Control Panel of JRE 6 will replace JRE 6 with JRE 7. Oracle Corporation. 19 Feb 2013 [2 Mar 2013]. 
  28. ^ Java™ SE Development Kit 6, Update 43 Release notes. Oracle Corporation. 4 Mar 2013 [4 Mar 2013]. 
  29. ^ Java™ SE Development Kit 6, Update 45 Release notes. Oracle Corporation. 4 Mar 2013 [4 Mar 2013]. 
  30. ^ https://java.com/en/download/faq/java_7.xml
  31. ^ JDK7, Sun.
  32. ^ Introducing Java 7 Webcast: Moving Java Forward. Oracle Corporation. July 7, 2011 [May 30, 2012]. 
  33. ^ JDK 7 Schedule. 
  34. ^ JDK 7 at OpenJDK
  35. ^ JDK 7 Milestones. OpenJDK. Oracle Corporation. [May 30, 2012]. 
  36. ^ Miller, Alex. Java 7. [2008-05-30]. 
  37. ^ JSR 292: Supporting Dynamically Typed Languages on the JavaTM Platform. [25 August 2013]. 
  38. ^ Compressed oops in the Hotspot JVM. OpenJDK. [2012-08-01]. 
  39. ^ Java HotSpot VM Options. Oracle. [2013-04-11]. 
  40. ^ Java Programming Language Enhancements. Download.oracle.com. [2013-01-15]. 
  41. ^ Strings in switch Statements. Download.oracle.com. [2013-01-15]. 
  42. ^ The try-with-resources Statement. Download.oracle.com. [2013-01-15]. 
  43. ^ Type Inference for Generic Instance Creation. Download.oracle.com. [2013-01-15]. 
  44. ^ Improved Compiler Warnings When Using Non-Reifiable Formal Parameters with Varargs Methods. Download.oracle.com. [2013-01-15]. 
  45. ^ Binary Literals. Download.oracle.com. [2013-01-15]. 
  46. ^ Underscores in Numeric Literals. Download.oracle.com. [2013-01-15]. 
  47. ^ Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking. Download.oracle.com. [2013-01-15]. 
  48. ^ Concurrency JSR-166. [2010-04-16]. 
  49. ^ File I/O (Featuring NIO.2). Java.sun.com. 2008-03-14 [2013-01-15]. 
  50. ^ Legacy File I/O Code. Java.sun.com. 2012-02-28 [2013-01-15]. 
  51. ^ JDK 7 Features. OpenJDK. 2011-07-28 [2013-03-15]. 
  52. ^ https://blogs.oracle.com/java-platform-group/entry/introducing_deployment_rule_sets
  53. ^ Proposed new schedule for Java 8. 2013-04-18 [2013-04-19]. 
  54. ^ JDK 8. OpenJDK. 2013-04-18 [2014-01-28]. 
  55. ^ JDK 8 features. OpenJDK. 2014-01-28 [2014-01-28]. 
  56. ^ JSR 337. [2014-01-30]. 
  57. ^ Java 7 Features. Sun Microsystems. 2010-02-09 [2010-04-16]. 
  58. ^ Interface evolution via virtual extension methods (PDF). Brian Goetz. 2011-07-20 [2014-03-27]. 
  59. ^ Lambda Expressions for the JavaTM Programming Language. Brian Goetz. 2012-10-23 [2014-03-27]. 
  60. ^ The Java Tutorials: Default Methods. Oracle. [2014-03-27]. 
  61. ^ http://openjdk.java.net/jeps/104
  62. ^ https://blogs.oracle.com/darcy/entry/unsigned_api
  63. ^ http://openjdk.java.net/jeps/120
  64. ^ http://openjdk.java.net/jeps/150
  65. ^ http://openjdk.java.net/jeps/178
  66. ^ http://openjdk.java.net/jeps/153
  67. ^ http://openjdk.java.net/jeps/122
  68. ^ Oracle JDK 8 and JRE 8 Certified System Configurations. Oracle Corporation. [2014-04-15]. 
  69. ^ Stahl, Henrik. Updated: The future of Java on Windows XP. Oracle Corporation. 2014-07-11 [2014-11-11]. JDK 8 is not supported on Windows XP. Early versions of JDK 8 had known issues with the installer on Windows XP that prevented it from installing without manual intervention. This was resolved in JDK 8 Update 25. The important point here is that we can no longer provide complete guarantees for Java on Windows XP, since the OS is no longer being updated by Microsoft. We strongly recommend that users upgrade to a newer version of Windows that is still supported by Microsoft in order to maintain a stable and secure environment. 
  70. ^ Blog By Tori Wieldt-Oracle on Oct 27, 2014 https://blogs.oracle.com/java/entry/java_se_8_on_java
  71. ^ Java™ SE Development Kit 8, Update 5 (JDK 8u5). oracle.com. [2014-04-28]. 
  72. ^ Java™ SE Development Kit 8, Update 11 (JDK 8u11). oracle.com. [2014-07-16]. 
  73. ^ 18 security bug fixes. oracle.com. [2014-07-16]. 
  74. ^ Java™ SE Development Kit 8, Update 20 (JDK 8u20). oracle.com. [2014-08-27]. 
  75. ^ Java™ SE Development Kit 8 Update 20 Bug Fixes
  76. ^ Java™ SE Development Kit 8, Update 25 (JDK 8u25). oracle.com. [2014-10-14]. 
  77. ^ Java™ SE Development Kit 8, Update 31 (JDK 8u31). oracle.com. [2015-01-21]. 
  78. ^ Java™ SE Development Kit 8, Update 40 (JDK 8u40). oracle.com. [2015-03-04]. 
  79. ^ Java™ SE Development Kit 8 Update 40 Bug Fixes
  80. ^ Java™ SE Development Kit 8, Update 45 (JDK 8u45). oracle.com. [2015-04-15]. 
  81. ^ Java™ SE Development Kit 8, Update 51 (JDK 8u51). oracle.com. [2015-07-14]. 
  82. ^ Java™ SE Development Kit 8, Update 60 (JDK 8u60). oracle.com. [2015-08-18]. 
  83. ^ Java™ SE Development Kit 8 Update 60 Bug Fixes
  84. ^ Java™ SE Development Kit 8, Update 65 (JDK 8u65). oracle.com. [2015-10-20]. 
  85. ^ Java™ SE Development Kit 8, Update 66 Release Notes. oracle.com. [22 October 2015]. 
  86. ^ Java™ SE Development Kit 8, Update 71 Release Notes. oracle.com. [20 January 2015]. 
  87. ^ Java™ SE Development Kit 8 Update 71 Bug Fixes. oracle.com. [20 January 2015]. 
  88. ^ Java™ SE Development Kit 8, Update 73 Release Notes. oracle.com. [6 February 2016]. 
  89. ^ Java™ SE Development Kit 8, Update 74 Release Notes. oracle.com. [6 February 2016]. 
  90. ^ Java™ SE Development Kit 8, Update 77 Release Notes. oracle.com. [23 March 2016]. 
  91. ^ Java™ SE Development Kit 8, Update 91 Release Notes. oracle.com. [23 March 2016]. 
  92. ^ Java™ SE Development Kit 8, Update 92 Release Notes. [23 March 2016]. 
  93. ^ Java™ SE Development Kit 8, Update 101 Release Notes. [19 July 2016]. 
  94. ^ Java™ SE Development Kit 8, Update 102 Release Notes. [19 July 2016]. 
  95. ^ Java™ SE Development Kit 8, Update 111 Release Notes. [19 October 2016]. 
  96. ^ Java™ SE Development Kit 8, Update 112 Release Notes. [19 October 2016]. 
  97. ^ Mark your calendar: Java 9 finally has a release date. 
  98. ^ JavaOne: JavaFX 2, Java on iOS. 
  99. ^ Cloud; Security; Australia; Vmware; Microsoft; dive, NASA starts countdown for Cassini probe's Saturn death; rc8, Linux 4 8 probably needs; Oracle takes aim at AWS with cheap, fast public and hybrid cloud. JDK 9 release delayed another four months. [2016-10-14]. 
  100. ^ Project Jigsaw. OpenJDK. 
  101. ^ Java Module-System Requirements — DRAFT 12. Oracle. 
  102. ^ Project Jigsaw delayed until Java 9. JavaWorld. 
  103. ^ jshell: The Java Shell. 
  104. ^ OpenJDK: Project Kulla. 
  105. ^ Vladimir Kozlov. JEP 295: Ahead-of-Time Compilation. Oracle Corporation. 2016-10-13 [2016-10-13]. Compile Java classes to native code prior to launching the virtual machine. 
  106. ^ JEP 268: XML Catalogs. Oracle Corporation. 2013-08-26 [2016-11-01]. Develop a standard XML Catalog API that supports the OASIS XML Catalogs standard, v1.1 
  107. ^ JEP 266: More Concurrency Updates. Oracle Corporation. 2016-09-01 [2016-11-01]. Interfaces supporting the Reactive Streams publish-subscribe framework, nested within the new class Flow, along with a utility class SubmissionPublisher that developers can use to create custom components 
  108. ^ Humble, Charles. HSA Foundation Targeting Heterogeneous GPU-CPU Execution for Java Virtual Machines by 2015. InfoQ. Sep 18, 2013. 
  109. ^ Rose, John; Goetz, Brian; Steele, Guy. Value Types for Java. 
  110. ^ Rose, John. JEP 169 Value Types for Java. 
  111. ^ Project Currency and Money. 
  112. ^ JSR 354 – Money and Currency API. 

外部連結