睡觉时:新增的Java 8新增功能
自Java 8推出以來,最有趣的功能是什么?
Java 8最近慶祝了它的第一個生日,而主要版本剛剛一年多前發布。 這當然值得慶祝。
自從最初的Java 8版本問世以來,已經發布了六個更新。 這些更新中的一些元素是次要的,但是如果您不注意的話,您可能會漏掉一些有趣的附加內容。 這里有五個您應該檢查的:
新帖:睡覺時:新增的Java 8新增功能http://t.co/4bGHVwzo7q pic.twitter.com/lZz2Aq2XTA
— Takipi(@takipid) 2015年3月30日
1. Nashorn性能增強
Java 8帶來的附加功能之一是Nashorn。 如果您不熟悉,“ Nashorn的目標是通過Java與本地JVM一起實現輕量級高性能JavaScript運行時。” 在8u40版本中,Oracle發布了Nashorn腳本引擎的增強功能,以改善Java和JavaScript之間的工作關系。 盡管是完全不同的語言,但根據他們的名字,讓他們兩個都能很好地工作會帶來一種滿足感。 就像雙體船上的貓一樣。
通過此更新,Nashorn已被改寫為一種樂觀類型系統,以更好地應對在Java環境中實現JavaScript的一些挑戰(即圍繞將動態語言(如JavaScript)輸出為Java字節碼)。 通過樂觀類型,Nashorn對不能靜態推斷的局部變量和表達式類型做出樂觀假設。 它假定任何類型都是int,并在運行時發現錯誤的情況下即時調整這些假設。
這項增強功能可以使執行代碼更加快捷,盡管由于調整而導致的預熱時間略有降低。 正如Nashorn團隊所報告的那樣 ,預熱時間問題是Java 9的重點之一,因此,如果這對您來說是一個大問題,那么好消息可能即將到來。 顯然,您必須在這里決定是否值得為您準備好預熱成本,但是Oracle為這些Nashorn增強功能運行的基準測試非常令人鼓舞。 與V8相比,在某些情況下,他們報告了數量級的改進和接近本機的性能。
這些增強功能的另一個潛在的令人敬畏的好處是,Nashorn可以擴展到JavaScript以外的其他動態語言。 在這方面仍然需要做一些工作,但是現在有了樂觀打字系統的基礎。
Oracle目前還沒有將這些增強功能設置為Nashorn的默認功能,因此,如果要以這種方式運行Nashorn,請使用參數–optimistic-types = true。 如果您想了解更多有關此增強功能的詳細信息,請在此處查看Oracle博客。
- 從以下版本開始可用: Java 8 Update 40
2.合作記憶管理(商業功能)
Oracle對Java 8的另一項補充是協作內存管理。 此功能引入了“內存壓力”的概念,并且全部用于解決內存使用量接近最大水平的情況。 內存壓力是系統可用總內存的代表。 內存壓力測量值越高,系統越接近內存不足。
當系統快要用完內存時,JDK將跟蹤總內存使用量并采取措施減少總內存使用量。 通常,這些步驟將包括減少Java堆大小,這可能會對性能產生一些影響。 在這種情況下,有意進行性能折衷是值得的。
//邊響警報
要注意的重要一點是,這是一項商業功能。 如果您是HotSpot或OpenJDK開發人員,則將無法使用該功能。 您無疑知道Oracle和Java在商業和開源方面之間的某些緊張關系,這是另一個例子。 協作內存管理本身可能是一項商業功能,但它會驅動和/或影響屬于開源陣營的其他增強功能(例如,我正在談論的列表中的下一個功能)。 無論您是將這些其他更改視為對商業工作的主要有益結果,還是作為試圖將開源用戶吸引到商業方面的鉤子,都不可避免地涉及一些不透明性問題。
Oracle(可以理解)沒有共享其商業功能的內部測試和基準。 但是,當這些功能擴展到開源方面進行的更改時,“為什么要進行這些更改”的答案實質上是“因為我們告訴您更好,即使我們不會告訴您如何做”,您可以看到為什么有些人會不高興。 并不是說甲骨文在彎腰曲折,或者某種程度上,這僅僅是因為缺乏透明度并不能與開源世界息息相關,并阻礙了開發人員真正做出明智決定的能力。 無論如何,足夠了。
//側邊結束。
- 從以下版本開始可用: Java 8 Update 40
3.使MinHeapFreeRatio和MaxHeapFreeRatio標志易于管理
合作記憶管理的增加也是其他變化的催化劑。 其中之一是通過能夠在運行時調整其值,使MaxHeapFreeRatio和MinHeapFreeRatio標志可管理。 通過此更新,您可以控制這些標志的值,這些標志的默認值分別從70/40更改為100/0,以使JVM更好地增長和收縮Java堆。 與協作內存管理不同,管理這些標志不是商業性的,可以單獨使用。 商業的合作內存管理功能確實使跨多個JVM實例的管理變得更加容易,但這不是必需的。 無論如何,對這些標志的更改應該改善在需要動態堆或更改堆的情況下管理Java堆大小的經驗。
現在,與所有可管理的事物一樣,存在嚴格管理默認設置會導致管理不善的風險,導致性能不佳。 獲得更多控制權并不是一件好事。 這里要權衡的是,能夠管理這些標志可以幫助您在減少使用次數時減少內存占用,或在增加使用次數時更輕松地擴展內存。 即使您是一個傾向于質疑這種由商業驅動的變革所帶來的廣泛好處的人,它本身也確實提供了實實在在的好處(如果您屬于這個陣營,我當然不會為此怪罪您)。 而且,如果這些標志的某些問題導致代碼中出現錯誤或異常, Takipi會在這里為您找到它們!
- 從以下版本開始可用: Java 8 Update 20
4.新的JAXP處理限制屬性– maxElementDepth
maxElementDepth屬性已添加到JAXP(用于XML處理的Java API)中,以解決資源使用問題。 它使應用程序能夠限制其解析的xml文件的最大元素深度。 設置限制時,所有JDK和JRE調用都會遵守該限制。
如果您偶爾處理巨大的xml文件,并且不想花費大量資源來解析周圍的特大文件,則此屬性會派上用場。 它也可以用作安全性或性能檢查,以防止您的應用程序被怪物文件占用。
- 從以下版本開始可用: Java 8 Update 11
5. Java依賴性分析工具(jdeps)
Java依賴性分析工具(jdeps)是一個新的命令行工具,開發人員可以使用它來顯示其應用程序和Java庫的靜態依賴性。 它提供了一定程度的自定義,因此您可以從中獲得相當廣泛的信息。 在默認情況下運行它時,它將在軟件包級別向您顯示應用程序的靜態依賴關系。
jdeps來自joda-time
您也可以在更細粒度或更詳細的級別上運行jdeps。 例如,您可以使用指定的特定類運行它,以便查看該類的所有靜態依賴關系。 或者,如果您感到煩躁,可以使用-v或-verbose選項來打印所有類級別的依賴項。 這自然會導致大量文本,因此jdeps還提供了-dotoutput選項,可將所有內容寫入文件。
還需要注意的是-jdkinternals選項,該選項向您顯示JDK內部API中的所有類級別的依賴關系。
有關更多信息,請參見jdeps頁面。
- 從以下版本開始可用: Java 8 Update 11
結論
現在,Oracle當然已經發布了六個更新,其中不僅僅包含這五個附加內容,而且根據您所使用的Java的不同,我可能還沒有為您提供一些重要的功能(例如JavaFX的性能增強),但是這些是五個非常值得關注的很棒的東西。 我不能說將來的發行版中會有什么,但是這里是希望有更多有趣的東西。 如果我錯過了您發現超級有用的任何補充,請告訴我。
翻譯自: https://www.javacodegeeks.com/2015/03/while-you-were-sleeping-the-top-new-java-8-additions.html
總結
以上是生活随笔為你收集整理的睡觉时:新增的Java 8新增功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 店小蜜怎么设置(店小蜜怎么设置问题设置答
- 下一篇: 一种通过变量插值读取属性的方法