Java SE Development Kit 10是一款由Oracle公司推出的Java語言的軟件開發(fā)工具包套件,它是整個Java的核心,包括了Java運行環(huán)境(Java Runtime Envirnment),一堆Java工具和Java基礎的類庫(rt.jar),主要用于移動設備、嵌入式設備上的java應用程序。用戶想要在電腦上運行JAVA程序,需要先安裝JDK環(huán)境!
Java SE10軟件功能
1、java小程序和Web啟動代碼簽名
從java SE 7u21所有java小應用程序和網(wǎng)頁開始應用鼓勵與信任的證書簽名。
2、java平臺的安全
由角色提供的安全信息的描述。對于開發(fā)人員、系統(tǒng)管理員、家庭用戶和安全專業(yè)人員。
3、配置規(guī)則集
配置規(guī)則集允許桌面管理控制水平的java客戶端兼容性和默認提示整個組織。
4、服務器的JRE
從java SE 7u21,服務器的java運行環(huán)境(服務器JRE)包可用于部署java應用服務器。
5、java任務控制
java飛行記錄器和java任務控制共同創(chuàng)造一個完整的工具鏈不斷收集低水平和詳細的運行時信息使事實事件分析后。
6、先進的管理控制臺
為系統(tǒng)管理員提供在不同的java版本對企業(yè)實現(xiàn)更安全的環(huán)境和增強的應用經(jīng)驗和可用性的桌面運行的有效控制。
新特色
1.局部變量類型推斷
局部變量類型推斷可以說是Java 10中最值得注意的特性,這是Java語言開發(fā)人員為了簡化Java應用程序的編寫而采取的又一步,如下圖所示。
這個新功能將為Java增加一些語法糖 – 簡化它并改善開發(fā)者體驗。新的語法將減少與編寫Java相關的冗長度,同時保持對靜態(tài)類型安全性的承諾。局部變量類型推斷將引入”var”關鍵字,也就是你可以隨意定義變量而不必指定變量的類型,如下圖:將被下面這個新語法所取代:
看完是不是有點JS的即視感???越來越像JS了嗎?!雖然類型推斷在Java中不是一個新概念,但在局部變量中確是很大的一個改進。
說到類型推斷,從JDK 5引進泛型,到JDK 7的”<>”操作符允許不綁定類型而初始化List,再到JDK 8的Lambda表達式,再到現(xiàn)在JDK 10的局部變量類型推斷,Java類型推斷正大刀闊斧的向前發(fā)展。
2. GC改進和內(nèi)存管理
JDK 10中有2個JEP專門用于改進當前的垃圾收集元素。
第一個垃圾收集器接口是(JEP 304),它將引入一個純凈的垃圾收集器接口,以幫助改進不同垃圾收集器的源代碼隔離。
預定用于Java 10的第二個JEP是針對G1的并行完全GC(JEP 307),其重點在于通過完全GC并行來改善G1最壞情況的等待時間。G1是Java 9中的默認GC,并且此JEP的目標是使G1平行。
3. 線程本地握手(JEP 312)
JDK 10將引入一種在線程上執(zhí)行回調(diào)的新方法,因此這將會很方便能停止單個線程而不是停止全部線程或者一個都不停。
4. 備用內(nèi)存設備上的堆分配(JEP 316)
允許HotSpot VM在備用內(nèi)存設備上分配Java對象堆內(nèi)存,該內(nèi)存設備將由用戶指定。
5. 其他Unicode語言 – 標記擴展(JEP 314)
目標是增強java.util.Locale及其相關的API,以便實現(xiàn)語言標記語法的其他Unicode擴展(BCP 47)。
6. 基于Java的實驗性JIT編譯器
Oracle希望將其Java JIT編譯器Graal用作Linux / x64平臺上的實驗性JIT編譯器。
7. 根證書(JEP 319)
這個的目標是在Oracle的Java SE中開源根證書。
8. 根證書頒發(fā)認證(CA)
這將使OpenJDK對開發(fā)人員更具吸引力,它還旨在減少OpenJDK和Oracle JDK構建之間的差異。
9. 將JDK生態(tài)整合單個存儲庫(JEP 296)
此JEP的主要目標是執(zhí)行一些內(nèi)存管理,并將JDK生態(tài)的眾多存儲庫組合到一個存儲庫中。
10. 刪除工具javah(JEP 313)
從JDK中移除了javah工具,這個很簡單并且很重要。
新增功能
1、核心庫/ java.util中
Optional.orElseThrow()方法
一個新的方法orElseThrow已被添加到Optional課堂上。它是現(xiàn)有get方法的同義詞,并且是現(xiàn)在的首選方法。
2、核心庫/ java.util中:收藏
用于創(chuàng)建不可修改集合的API
已經(jīng)添加了幾個新的API,以促進創(chuàng)建不可修改的集合。該List.copyOf,Set.copyOf和Map.copyOf方法從現(xiàn)有實例中創(chuàng)建新的集合實例。新的方法toUnmodifiableList,toUnmodifiableSet以及toUnmodifiableMap已被添加到Collectors在流包類。這些允許流的元素被收集到一個不可修改的集合中。
3、芯-SVC / java.lang.management
系統(tǒng)屬性以禁用JRE上次使用情況跟蹤
引入了新的系統(tǒng)屬性jdk.disableLastUsageTracking來禁用正在運行的VM的JRE上次使用情況跟蹤。該屬性可以在命令行通過使用被設置 -Djdk.disableLastUsageTracking=true或-Djdk.disableLastUsageTracking。使用此系統(tǒng)屬性集,無論設置的com.oracle.usagetracker.track.last.usage屬性值如何,JRE上次使用情況跟蹤都將被禁用usagetracker.properties。
4、芯-SVC / javax.management
為開箱即用的JMX代理散列密碼
jmxremote.passwordJMX代理現(xiàn)在正在使用SHA3-512散列覆蓋文件中的明文密碼。該角色的每一行都遵循以下格式:
role_name W hashedPassword
Where:
role_name是任何不包含空格或制表符的字符串。
W =空格或制表符
散列密碼的格式如下:
hashedPassword = base64_encoded_64_byte_salt W base64_encoded_hash W hash_algorithm
Where:
base64_encoded_64_byte_salt = 64字節(jié)隨機鹽
base64_encoded_hash = Hash_algorithm(密碼+鹽)
W =空格或制表符
hash_algorithm =使用格式https://docs.oracle.com/javase/9??/docs/specs/security/standard-names.htmlmessagedigest-algorithms指定的算法字符串。這是個可選的選項。如果未指定,則認為SHA3-512是算法字符串。
如果密碼是明確的,如果滿足以下所有條件,它們將被哈希覆蓋:
com.sun.management.jmxremote.password.toHashes屬性在management.properties文件中設置為true 。
密碼文件是可寫的。
如果配置了安全管理器,則系統(tǒng)安全策略允許寫入密碼文件。
為了更改角色的密碼,請將散列的密碼條目替換為新的明文密碼或新的散列密碼。如果新密碼處于清除狀態(tài),則在進行新的登錄嘗試時將用其哈希代替。
給定角色在此文件中至少應有一個條目。如果某個角色沒有條目,則無權訪問。如果為同一個角色名稱找到多個條目,則使用最后一個條目。
用戶生成的哈希密碼文件也可以用來代替明文密碼文件。如果由用戶生成,則散列密碼必須遵循上面指定的格式。
該文件必須只能由所有者訪問,否則程序將退出并出現(xiàn)錯誤。
為了防止無意中編輯生產(chǎn)環(huán)境中的密碼文件,建議部署只讀哈希密碼文件??梢酝ㄟ^運行JMX代理預先生成清除密碼的散列條目。
建議在代理運行時不要編輯密碼文件。如果客戶端連接在外部修改文件的同時觸發(fā)密碼文件散列,則編輯可能會丟失。文件的完整性是有保證的,但是在代理讀取文件和寫回文件之間的短時間內(nèi)對文件進行的任何外部編輯可能會丟失。
5、熱點/ GC
G1的JEP 307并行完整GC
通過完全GC并行改善G1最壞情況下的延遲。G1垃圾收集器旨在避免完整收集,但是當并發(fā)收集無法快速回收內(nèi)存時,會發(fā)生回退完整GC。完整的GC for G1的舊版本使用單線程標記掃描 - 緊湊算法。使用JEP 307,完整的GC已經(jīng)并行化,現(xiàn)在使用與年輕和混合集合相同數(shù)量的并行工作線程。
6、安全庫/ java.security
JEP 319根證書
在JDK中提供一組默認的根證書頒發(fā)機構(CA)證書。
cacerts用于Linux x64的OpenJDK 9二進制文件的密鑰庫已由JEP 319:根證書 [1] 填充,并帶有由Oracle的Java SE根CA程序的CA頒發(fā)的一組根證書。這解決了cacerts用于Linux x64的OpenJDK 9二進制文件中的空密鑰庫問題。cacerts由于未安裝受信任的根證書頒發(fā)機構,空的密鑰庫阻止了建立TLS連接。作為OpenJDK 9二進制文件的解決方法,用戶必須將javax.net.ssl.trustStore系統(tǒng)屬性設置為使用不同的密鑰庫。
7、安全庫/ javax.net.ssl中
TLS會話哈希和擴展主秘密擴展支持
已為JDK JSSE提供程序中的TLS會話散列和擴展主密鑰擴展(RFC 7627)添加了支持。請注意,一般來說,如果未啟用端點標識并且以前的握手是會話恢復縮略初始握手,則服務器證書更改會受到限制,除非兩個證書所代表的身份可以視為相同。但是,如果啟用或協(xié)商擴展,則服務器證書更改限制不是必需的,因此將被相應地丟棄。如果出現(xiàn)兼容性問題,應用程序可能會通過將系統(tǒng)屬性設置為JDK jdk.tls.useExtendedMasterSecret來禁用此擴展的協(xié)商false。通過將系統(tǒng)屬性設置jdk.tls.allowLegacyResumption為false,當會話散列和擴展主密鑰擴展未協(xié)商時,應用程序可拒絕簡短握手。通過將系統(tǒng)屬性設置jdk.tls.allowLegacyMasterSecret為false,應用程序可拒絕不支持會話散列和擴展主密鑰擴展的連接。
8、工具/ javac的
生成增強for循環(huán)的字節(jié)碼生成
字節(jié)碼生成已針對增強for循環(huán)進行了改進,從而改進了它們的翻譯方法。例如:
List data = new ArrayList<>(); for (String b : data);
以下是增強后生成的代碼:
{ /*synthetic*/ Iterator i$ = data.iterator(); for (; i$.hasNext(); ) { String b = (String)i$.next(); } b = null; i$ = null; }
在for循環(huán)之外聲明迭代器變量允許在不再使用它時立即為其分配空值。這使GC可以訪問它,然后可以擺脫未使用的內(nèi)存。當增強for循環(huán)中的表達式是一個數(shù)組時,情況類似。
9、工具/ javadoc的(工具)
javadoc支持多種樣式表
一個新的javadoc命令行選項--add-stylesheet已被添加到javadoc工具中。新--add-stylesheet選項支持在生成的文檔中使用多個樣式表?,F(xiàn)有的-stylesheetfile選項現(xiàn)在有一個別名,--main-stylesheet以幫助區(qū)分主樣式表和其他樣式表。
10、工具/ javadoc的(工具)
重寫不改變規(guī)范的方法
新的選項--overridden-methods=值已被添加到javadoc工具中。許多類在不改變規(guī)范的情況下重寫繼承的方法。該--overridden-methods=值選項可用于組這些方法與其它的繼承方法,而不是用在類中聲明的其它方法記錄他們的細節(jié)。
11、工具/ javadoc的(工具)
API說明摘要的注釋標記
添加了一個新的內(nèi)聯(lián)標簽,{@summary ...}以明確指定用作API描述摘要的文本。默認情況下,從第一句推斷API描述的摘要。這是通過使用一個簡單的算法或java.text.BreakIterator。然而,這種啟發(fā)式方法并不總是正確的,可能會導致對第一句結尾的錯誤判斷。新的標簽可以顯式設置API摘要文本而不是推斷。
上一篇:編程貓MOD源碼編輯器