免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Java10新特性

2018年3月20日,Java 10 正式發(fā)布!

相關(guān)地址:

官方地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

Jdk下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html

安裝指南:https://docs.oracle.com/javase/10/install/overview-jdk-10-and-jre-10-installation.htm

 

Java現(xiàn)狀:

1)據(jù)統(tǒng)計(jì),目前90%的用戶在使用Java8及以下版本(值得慶幸的是Java8已經(jīng)成為主力軍)。

2)在社區(qū)的不斷刺激下,為了更快的迭代版本。官方將會(huì)在每年的3、9月進(jìn)行版本升級(jí)(版本更新周期將會(huì)穩(wěn)定在6個(gè)月)。

3)在最新的開發(fā)語言排行榜中,Java依然傲視群雄,穩(wěn)居第一!

 

一、Java10中12項(xiàng)關(guān)鍵新特性

局部變量的類型推斷

   Java開始引用像腳本語言JavaScript中的var類型(弱類型),允許你通過var定義任何類型的變量。

   對(duì)于開發(fā)人員來說,這是唯一和你密切相關(guān)的特性。它可以幫助你極大的簡(jiǎn)化代碼。

   有同學(xué)就會(huì)問了,var和Object有啥區(qū)別呢?

   咱們舉個(gè)栗子:

1
2
3
4
5
Object objList = new ArrayList<String>();
objList.add("hello,world!");//這句代碼會(huì)出現(xiàn)編譯異常
var varList = new ArrayList<String>();
varList.add("hello,world!");//而這句代碼會(huì)編譯通過

  以上代碼通過Java10編譯時(shí),第2行會(huì)出現(xiàn)異常(錯(cuò)誤: 找不到符號(hào)),當(dāng)然在Java10以下的版本也會(huì)編譯異常。

  但是通過var定義的變量卻可以編譯通過,為什么?因?yàn)関ar是一個(gè)類型引用對(duì)象,它和表達(dá)式右邊的類型具有相同的屬性。

  即以下兩句代碼是對(duì)等的:

1
2
3
var varList = new ArrayList<String>();
ArrayList<String> varList = new ArrayList<String>();

 

應(yīng)用類數(shù)據(jù)共享(CDS) 

  CDS 在 JDK5 時(shí)被引進(jìn)以改善 JVM 啟動(dòng)的表現(xiàn),同時(shí)減少當(dāng)多個(gè)虛擬機(jī)在同一個(gè)物理或虛擬的機(jī)器上運(yùn)行時(shí)的資源占用。
  JDK10 將擴(kuò)展 CDS 到允許內(nèi)部系統(tǒng)的類加載器、內(nèi)部平臺(tái)的類加載器和自定義類加載器來加載獲得的類。之前,CDS 的使用僅僅限制在了 bootstrap 的類加載器。

 

額外的 Unicode 語言標(biāo)簽擴(kuò)展

  這將改善 java.util.Locale 類和相關(guān)的 API 以實(shí)現(xiàn)額外 BCP47 語言標(biāo)簽的 Unicode 擴(kuò)展。尤其是,貨幣類型,一周的第一天,區(qū)域覆蓋和時(shí)區(qū)等標(biāo)簽現(xiàn)在將被支持。

 

?基于時(shí)間的版本控制

  我們的 JDK 版本字符串格式幾乎與 JDK 版本一樣多。幸運(yùn)的是,這是最后需要使用到的,我們可以堅(jiān)持用它。這種格式使用起來很像 JDK9 中介紹的提供一個(gè)更加語義的形式。有一件困擾我的事是包含了一個(gè) INTERIM 元素,正如 JEP 提議中所說,“永遠(yuǎn)是0”。好吧,如果永遠(yuǎn)是0,那它有什么意義呢?他們說這是為未來使用做保留,但我仍不是很贊同。我認(rèn)為,這有些冗余繁雜。
  這也消除了在 JDK9 中有過的相當(dāng)奇怪的情形。第一次更新是 JDK 9.0.1 , 非常符合邏輯。第二次更新是 JDK 9.0.4 ,不合邏輯。原因是,在 JDK9 的版本計(jì)數(shù)模式下,需要留下空白以便應(yīng)急或不在預(yù)期安排的更新使用。但既然沒有更新是必須的,為什么不簡(jiǎn)單稱之為 JDK 9.0.2 呢?

 

根證書

  在 JDK 中將提供一套默認(rèn)的 CA 根證書。關(guān)鍵的安全部件,如 TLS ,在 OpenJDK 構(gòu)建中將默認(rèn)有效。這是 Oracle 正在努力確保 OpenJDK 二進(jìn)制和 Oracle JDK 二進(jìn)制功能上一樣的工作的一部分,是一項(xiàng)有用的補(bǔ)充內(nèi)容。

 

并行全垃圾回收器 G1

  G1 是設(shè)計(jì)來作為一種低延時(shí)的垃圾回收器(但是如果它跟不上舊的堆碎片產(chǎn)生的提升速率的話,將仍然采用完整壓縮集合)。在 JDK9 之前,默認(rèn)的收集器是并行,吞吐,收集器。為了減少在使用默認(rèn)的收集器的應(yīng)用性能配置文件的差異,G1 現(xiàn)在有一個(gè)并行完整收集機(jī)制。

 

移除 Native-Header 自動(dòng)生成工具

  Java9 開始了一些對(duì) JDK 的家務(wù)管理,這項(xiàng)特性是對(duì)它的延續(xù)。當(dāng)編譯 JNI 代碼時(shí),已不再需要單獨(dú)的工具來生成頭文件,因?yàn)檫@可以通過 javac 完成。在未來的某一時(shí)刻,JNI 將會(huì)被 Panama 項(xiàng)目的結(jié)果取代,但是何時(shí)發(fā)生還不清楚。

 

垃圾回收器接口

  這不是讓開發(fā)者用來控制垃圾回收的接口;而是一個(gè)在 JVM 源代碼中的允許另外的垃圾回收器快速方便的集成的接口。

 

線程-局部變量管控

  這是在 JVM 內(nèi)部相當(dāng)?shù)图?jí)別的更改,現(xiàn)在將允許在不運(yùn)行全局虛擬機(jī)安全點(diǎn)的情況下實(shí)現(xiàn)線程回調(diào)。這將使得停止單個(gè)線程變得可能和便宜,而不是只能啟用或停止所有線程。

 

在備用存儲(chǔ)裝置上的堆分配

  硬件技術(shù)在持續(xù)進(jìn)化,現(xiàn)在可以使用與傳統(tǒng) DRAM 具有相同接口和類似性能特點(diǎn)的非易失性 RAM 。這項(xiàng) JEP 將使得 JVM 能夠使用適用于不同類型的存儲(chǔ)機(jī)制的堆。

 

? 試驗(yàn)性的基于 Java 的 JIT 編譯器

  最近宣布的 Metropolis 項(xiàng)目,提議用 Java 重寫大部分 JVM 。乍一想,覺得很奇怪。如果 JVM 是用 Java 編寫的,那么是否需要一個(gè) JVM 來運(yùn)行 JVM ? 相應(yīng)的,這導(dǎo)致了一個(gè)很好的鏡像類比。 現(xiàn)實(shí)情況是,使用 Java 編寫 JVM 并不意味著必須將其編譯為字節(jié)碼,你可以使用 AOT 編譯,然后在運(yùn)行時(shí)編譯代碼以提高性能。

  這項(xiàng) JEP 將 Graal 編譯器研究項(xiàng)目引入到 JDK 中。并給將 Metropolis 項(xiàng)目成為現(xiàn)實(shí),使 JVM 性能與當(dāng)前 C++ 所寫版本匹敵(或有幸超越)提供基礎(chǔ)。

 

合并 JDK 多個(gè)代碼倉庫到一個(gè)單獨(dú)的儲(chǔ)存庫中

   在 JDK9 中,有 8 個(gè)倉庫: root、corba、hotspot、jaxp、jaxws、jdk、langtools 和 nashorn 。在 JDK10 中這些將被合并為一個(gè),使得跨相互依賴的變更集的存儲(chǔ)庫運(yùn)行 atomic commit (原子提交)成為可能。

 

 

二、新增API或函數(shù)

有 73 項(xiàng)新增內(nèi)容添加到了標(biāo)準(zhǔn)類庫中。

? java.awt.Toolkit:
  int getMenuShortcutKeyMaskEx(): 確定哪個(gè)擴(kuò)展修飾符鍵是菜單快捷鍵的適當(dāng)加速鍵。

 

? java.awt.geom.Path2D:
  void trimToSize(): 將此 Path2D 實(shí)例的容量計(jì)算到它當(dāng)前的大小。應(yīng)用可使用此操作將路徑的存儲(chǔ)空間最小化。這個(gè)方法也被添加到 Path2D.Double 和 Path2D.Float 類。

 

? java.io.ByteArrayOutputStream:
  String toString(Charset): 重載 toString(),通過使用指定的字符集解碼字節(jié),將緩沖區(qū)的內(nèi)容轉(zhuǎn)換為字符串。

 

? java.io.PrintStream:
  lang.io.PrintWriter:
  這兩個(gè)類都有三個(gè)新的構(gòu)造函數(shù),它們需要額外的 Charset 參數(shù)。

 

? java.io.Reader:
  long transferTo(Writer): 從這個(gè) Reader 中讀取所有字符,并按照所讀的順序?qū)⒆址麑懭虢o定的 Writer 。

 

? java.lang.Runtime.Version:
  有四種新方法返回新(JEP 322)版本字符串字段的整數(shù)值: feature()、interim()、patch()和 update()。

 

? java.lang.StackWalker.StackFrame:
  String getDescriptor(): 按照 JVM 標(biāo)準(zhǔn)返回此堆棧幀所代表的方法的描述符。
  String getMethodType(): 返回此堆棧幀所代表的方法類型,描述參數(shù)類型和返回值類型。

 

? java.lang.invoke.MethodType:
  Class<?> lastParameterType(): 返回這個(gè)方法類型的最后一個(gè)參數(shù)類型。如果這個(gè)方法類型沒有參數(shù),則返回空類型作為崗哨值(Sentinel Value)。

 

? java.lang.management.RuntimeMXBean:
  long getPid():  返回正在運(yùn)行的 JVM 的進(jìn)程 ID 。

 

? java.lang.management.ThreadMXBean:
  ThreadInfo[] dumpAllThreads(boolean, boolean, int): 返回所有活動(dòng)線程的線程信息,其中有指定的最大元素?cái)?shù)量和同步信息的堆棧跟蹤。
  ThreadInfo[] getThreadInfo(long[], boolean, boolean, int): 返回每個(gè)線程的線程信息,這些線程的標(biāo)識(shí)位于輸入數(shù)組中,其中有指定的最大元素?cái)?shù)量和同步信息的堆棧跟蹤。

 

? java.lang.reflect.MalformedParameterizedTypeException:

  添加了一個(gè)新的構(gòu)造函數(shù),它以字符串的形式作為參數(shù)來獲取詳細(xì)信息。

 

? java.net.URLDecoder:
  java.net.URLEncoder:
  這兩個(gè)類都有新的重載的解碼和編碼方法,將 charset 作為附加參數(shù)。

 

? java.nio.channels.Channels:
  兩個(gè)新的靜態(tài)重載方法,允許使用 Charset 的 newReader(ReadByteChannel,Charset)和newWriter(WriteByteChannel,Charset)。

 

? java.nio.file.FileStore:
  long getBlockSize(): 在這個(gè)文件存儲(chǔ)中返回每個(gè)塊的字節(jié)數(shù)。

 

? java.time.chrono.HijrahEra:

  java.time.chrono.MiinguoEra:

  java.time.chrono.ThaiBuddhistEra:
  String getDisplayName(TextStyle, Locale): 這將返回用于識(shí)別 era 的文本名稱,適合于向用戶展示。

 

? java.time.format.DateTimeFormatter:
  localizedBy(Locale): 返回指定格式器的一個(gè)副本,其中包含地區(qū)、日歷、區(qū)域、小數(shù)和/或時(shí)區(qū)的本地化值,這將取代該格式器中的值。

 

? java.util.DoubleSummaryStatistics:

  java.util.IntSummaryStatistics:

  java.util.LongSummaryStatistics:

  這3個(gè)類增加了一個(gè)新的構(gòu)造函數(shù),它包含 4 個(gè)數(shù)值。它使用指定的計(jì)數(shù)、最小值、最大值和總和構(gòu)造一個(gè)非空實(shí)例。

 

? java.util.List:
  java.util.Map:
  java.util.Set:

  這3個(gè)接口都增加了一個(gè)新的靜態(tài)方法,copyOf(Collection)。這些函數(shù)按照其迭代順序返回一個(gè)不可修改的列表、映射或包含給定集合的元素的集合。

 

? java.util.Optional:
  java.util.OptionalDouble:
  java.util.OptionalInt:
  java.util.OptionalLong: 這些類都增加了一個(gè)新的方法orElseThrow()。它本質(zhì)上和 get()一樣,也就是說,如果 Optional 有值則返回。否則,將拋出 NoSuchElementException 。

 

? java.util.Formatter:
  java.util.Scanner:
  這兩個(gè)類都有三個(gè)新的構(gòu)造函數(shù),除了其他參數(shù)之外,它們都帶有一個(gè) charset 參數(shù)。

 

? java.util.Properties:

  增加了一個(gè)新的構(gòu)造函數(shù),它接受一個(gè) int 參數(shù)。這將創(chuàng)建一個(gè)沒有默認(rèn)值的空屬性列表,并且指定初始大小以容納指定的元素?cái)?shù)量,而無需動(dòng)態(tài)調(diào)整大小。還有一個(gè)新的重載的 replace 方法,接受三個(gè) Object 參數(shù)并返回一個(gè)布爾值。只有在當(dāng)前映射到指定值時(shí),才會(huì)替換指定鍵的條目。

 

? java.SplittableRandom:
  void nextBytes(byte[]): 用生成的偽隨機(jī)字節(jié)填充一個(gè)用戶提供的字節(jié)數(shù)組。

 

? java.util.concurrent.FutureTask:

  添加了 toString()方法,該方法返回一個(gè)標(biāo)識(shí) FutureTask 的字符串,以及它的完成狀態(tài)。在括號(hào)中,狀態(tài)包含如下字符串中的一個(gè),“Completed Normally” 、“Completed Exceptionally”、 “Cancelled” 或者 “Not completed”。

 

? java.util.concurrent.locks.StampedLock:
  boolean isLockStamp(long): 返回一個(gè)標(biāo)記戳表示是否持有一個(gè)鎖。
  boolean isOptimisticReadStamp(long): 返回一個(gè)標(biāo)記戳代表是否成功的進(jìn)行了樂觀讀(optimistic read)。
  boolean isReadLockStamp(long): 返回一個(gè)標(biāo)記戳表示是否持有一個(gè)非獨(dú)占鎖(即 read lock )。
  boolean isWriteLockStamp(long): 返回一個(gè)標(biāo)記戳表示是否持有一個(gè)獨(dú)占鎖(即 write lock )。

 

? java.jar.JarEntry:
  String getRealName(): 返回這個(gè) JarEntry 的真實(shí)名稱。如果這個(gè) JarEntry 是一個(gè)多版本 jar 文件的入口,它被配置為這樣處理,這個(gè)方法返回的名字是 JarEntry 所代表的版本條目的入口,而不是 ZipEntry.getName()返回的基本條目的路徑名。如果 JarEntry 不代表一個(gè)多版本 jar 文件的版本化條目或者 jar 文件沒有被配置為作為一個(gè)多版本 jar 文件進(jìn)行處理,這個(gè)方法將返回與 ZipEntry.getName()返回的相同名稱。

 

? java.util.jar.JarFile:
  Stream<JarEntry> versionedStream(): 返回 jar 文件中指定版本的入口對(duì)應(yīng) Stream 。與 JarEntry 的 getRealName 方法類似,這與多版本 jar 文件有關(guān)。

 

? java.util.spi.LocaleNameProvider:
  getDisplayUnicodeExtensionKey(String, Locale): 為給定的 Unicode 擴(kuò)展鍵返回一個(gè)本地化名稱。
  getDisplayUnicodeExtensionType(String, String, Locale): 為給定的 Unicode 擴(kuò)展鍵返回一個(gè)本地化名稱。

 

? java.util.stream.Collectors:
  toUnmodifiableList():
  toUnmodifiableSet():
  toUnmodifiableMap(Function, Function):
  toUnmodifiableMap(Function, Function, BinaryOperator):

  這四個(gè)新方法都返回 Collectors ,將輸入元素聚集到適當(dāng)?shù)牟豢尚薷牡募现小?/p>

 

? java.lang.model.SourceVersion:

  現(xiàn)在有了一個(gè)字段,它代表了 JDK 10 的版本。

 

? java.lang.model.util.TypeKindVisitor6:
  javax.lang.model.util.TypeKindVisitor9:
  R visitNoTypeAsModule(NoType, P): 訪問一個(gè) MODULE 的 pseudo-type 。不清楚為什么 Visitor7 和 Visitor8 沒有這個(gè)方法。

 

? javax.remote.management.rmi.RMIConnectorServer:
  這個(gè)類添加了兩個(gè)字段: CREDENTIALS_FILTER_PATTERN 和 SERIAL_FILTER_PATTERN 。

 

? javax.ButtonModel:
  ButtonGroup getGroup(): 返回按鈕所屬的組。通常用于單選按鈕,它們?cè)诮M中是互斥的。

 

? javax.plaf.basic.BasicMenuUI:
  Dimension getMinimumSize(JComponent): 返回指定組件適合觀感的最小大小。

 

 

三、其他

?  如果 Kerberos 的配置文件 krb5.conf 包含一個(gè) INCLUDEDIR 選項(xiàng),那么在 INCLUDEDIR 這個(gè)目錄下所有以 .conf 結(jié)尾的文件都會(huì)被默認(rèn)加載進(jìn)來。

?  以前版本中已經(jīng)過期的 Java 的啟動(dòng)選項(xiàng) -d32 和 –d64 在當(dāng)前版本已經(jīng)被移除。如果你在新的版本里仍然使用了這兩個(gè)選項(xiàng),JVM 將無法正常啟動(dòng)。

?  JDK10 支持 JDK9 中的新版本 Doclet,JDK6、JDK7、JDK8 中的 Doclet 版本都不再支持。

?  JDK10 重新啟用了在 JDK9 中被不當(dāng)過時(shí)的 newFactory() 方法。

?  JDK10 引入了一個(gè)新的 Javadoc 標(biāo)簽: {@summary…},解決了以前版本無法生成 API 摘要的問題。

?  JDK10 去掉了 BiasedLockingStartupDelay 的 4 秒啟動(dòng)延時(shí)。

?  以下在 com.sun.security.auth 包中的過時(shí)的類在新版本中都已經(jīng)被移除:

    PolicyFile

    SolarisNumericGroupPrincipal

    SolarisNumericUserPrincipal

    X500Principal

    SolarisLoginModule

    SolarisSystem

?  在 java.lang.SecurityManager 類中的以下屬性和方法(從 JDK 1.2 就已經(jīng)過時(shí))終于被移除了:

    inCheck (屬性)

    getInCheck

    classDepth

    classLoaderDepth

    currentClassLoader

    currentLoadedClass

    inClass

    inClassLoader

?  以下 java.lang.Runtime 類中已經(jīng)被廢棄的國際化方法在新版本被移除:

    getLocalizedInputStream

    getLocalizedOutputStream

?  以下廢棄的 Hotspot –X 選項(xiàng)在新版本中被移除:-Xoss, -Xsqnopause, -Xoptimize, -Xboundthreads and –Xusealtsigs.

?  policytool 在新版本中被移除。

?  javadoc 工具在新版本中可以通過 –add-stylesheets 命令選項(xiàng)支持多個(gè) stylesheets 。

?  新版本的 JVM 能夠根據(jù)系統(tǒng)分配給當(dāng)前 Docker 容器的 CPU 數(shù)和內(nèi)存來配置線程池和 GC 機(jī)制,而不再是直接使用系統(tǒng)的 CPU 和內(nèi)存。并且增加了三個(gè)更強(qiáng)大的命令選項(xiàng):-XX:InitialRAMPercentage、-XX:MaxRAMPercentage 和 -XX:MinRAMPercentage 。

?  新版本增加了一個(gè)新的系統(tǒng)屬性:jdk.disableLastUsageTracking。這個(gè)新增的屬性就像它的名字一樣,會(huì)禁用 JRE 的上一次使用跟蹤。

 

 

綜上所述,可以看到JDK的每個(gè)版本升級(jí)都會(huì)對(duì)我們或多或少的影響,我們需要不斷學(xué)習(xí)新技術(shù),接受新的思維模式。

當(dāng)然JDK一些內(nèi)部的優(yōu)化,對(duì)開發(fā)人員來說是透明的。它在不斷變強(qiáng)大的同時(shí),還在優(yōu)化提升性能、安全性、穩(wěn)定性。

Java10已經(jīng)來了,那么Java11還會(huì)遠(yuǎn)嗎?我們9月,不見不散!

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java 10 最重要的 5 個(gè)新特性!
java反射機(jī)制_Java交流
源碼分析:JDK獲取默認(rèn)時(shí)區(qū)的風(fēng)險(xiǎn)和最佳實(shí)踐
自定義標(biāo)簽庫
Hibernate類型映射之內(nèi)置類型映射
Java 理論與實(shí)踐: JDK 5.0 中更靈活、更具可伸縮性的鎖定機(jī)制
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服