在 Java 9 发布之后,Java 10很快问世。与以前的版本不同,Java 10并没有那么多令人兴奋的函数,但仍然没有几个重要的更新会改变您的编码方式以及其他将来的Java版本。
Java现在具有 var
样式声明。它允许您声明局部变量而无需指定其类型。变量的类型将从创建的实际对象的类型推断出来。它声称是JDK 10中开发人员的唯一真正函数。
var str = "Hello world"; //or String str = "Hello world";
在上面的示例中,两个语句都是等效的。在第一个语句中, str
的类型由赋值类型确定,而赋值的类型为 String
类型。
从Java 10开始,Oracle调整了基于时间的版本字符串方案。版本号的新格式为:
$FEATURE.$INTERIM.$UPDATE.$PATCH
与旧版本不同,新的基于时间的版本将不会延迟,并且函数将每六个月发布一次,并且对发布中的哪些函数没有限制。
也有长期发行(LTS)。它主要针对企业客户。 LTS版本的产品将提供Oracle的首要和持续支持,目标是每三年一次。此外这些版本更新将至少提供三年。
Java 9引入了G1(垃圾优先)垃圾收集器。 G1垃圾收集器的设计避免了完整的收集,但是当并发收集不能足够快地回收内存时。通过此更改,将发生后备完整GC。
G1完整GC的当前实现使用单线程的mark-sweep-compact算法。此更改将使mark-sweep-compact算法并行化,并使用相同数量的线程。当用于收集的并发线程无法足够快地恢复内存时,将触发该事件。
线程数可以通过 -XX:ParallelGCThreads
选项控制。
进行此更改的目的是使HotSpot VM能够在用户指定的备用存储设备(例如NV-DIMM)上分配Java对象堆。
要在这种内存中分配堆,无涯教程可以添加一个新选项-XX:AllocateHeapAt = <path>。该选项将采用文件系统的路径,并使用内存映射来实现在存储设备上分配对象堆的预期结果。现有的与堆相关的标志(例如-Xmx,-Xms等)以及与垃圾回收相关的标志将继续像以前一样工作。
作为此更改的一部分,为了简化和简化开发,将JDK林的许多存储库组合到一个存储库中。
在JDK 9中,有八个存储库: root
, corba
, hotspot
, jaxp
, jaxws
, jdk
, langtools
和 nashorn
。通常将Java模块的代码合并在单个顶级 src
目录下。例如,今天在JDK中,存在基于模块的目录,例如
$ROOT/jdk/src/java.base ... $ROOT/langtools/src/java.compiler ...
此代码改为组织为-
$ROOT/src/java.base $ROOT/src/java.compiler ...
此函数的目标是改善启动范围,扩展现有的类数据共享(" CDS")函数,以允许将应用程序类放置在共享档案中。
JDK 5中引入的类数据共享允许将一组类预处理为共享的存档文件,然后可以在运行时对其进行内存映射以减少启动时间。当多个JVM共享同一个存档文件时,它还可以减少动态内存占用。
当前,CDS仅允许引导类加载器加载归档的类。应用程序CDS允许内置的系统类加载器,内置的平台类加载器和自定义类加载器加载归档的类。
指定 -XX:+ UseAppCDS
命令行选项,以启用系统类加载器,平台类加载器和其他用户定义的类加载器的类数据共享。
目的是增强 java.util.Locale
和相关的API,以实现 BCP 47 语言标签。最初在Java SE 7中添加了对BCP 47语言标签的支持,并且对Unicode语言环境扩展的支持仅限于日历和数字。该JEP将在相关的JDK类中实现最新的 LDML规范中指定的更多扩展。 。
该JEP将增加对以下附加扩展的支持:
修改后的相关API为:
java.text.DateFormat::get*Instance java.text.DateFormatSymbols::getInstance java.text.DecimalFormatSymbols::getInstance java.text.NumberFormat::get*Instance java.time.format.DateTimeFormatter::localizedBy java.time.format.DateTimeFormatterBuilder::getLocalizedDateTimePattern java.time.format.DecimalStyle::of java.time.temporal.WeekFields::of java.util.Calendar::{getFirstDayOfWeek,getMinimalDaysInWeek} java.util.Currency::getInstance java.util.Locale::getDisplayName java.util.spi.LocaleNameProvider
此函数使基于Java的JIT编译器 Graal 可用作Linux/x64平台上的实验性JIT编译器。 Graal将使用JDK 9中引入的JVM编译器接口(JVMCI)。Graal已经存在于JDK中,因此将其作为实验性JIT启用将主要是一项测试和调试工作。
要启用Graal作为JIT编译器,请在Java命令行上使用以下选项:
-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler
Graal是从头开始完全重写Java中的JIT编译器。以前的JIT编译器是用C++编写的。
它将从JDK中删除 javah
工具,这是一个单独的工具,可在编译JNI代码时生成头文件,因为可以通过 javac
来完成。
这是Java 10的另一项着重于内务处理的函数。
Java 10中添加了73个新API。让无涯教程来看看其中的几个:
API | Remark |
---|---|
Optional.orElseThrow() | 新方法 orElseThrow 已添加到 Optional 类。它与现有的 get 方法同义,并且现在是它的首选。 |
List.copyOf , Set.copyOf 和 Map.copyOf | 这些方法从现有实例创建新的集合实例。 |
Collectors.toUnmodifiableList , Collectors.toUnmodifiableSet , Collectors.toUnmodifiableMap | 这些方法允许将 Stream 的元素收集到不可修改的集合中 |
--jdk.disableLastUsageTracking | 要为正在运行的VM禁用JRE上次使用情况跟踪。 |
--add-stylesheet | 在生成的文档中提供对使用多个样式表的支持离子。 |
--main-stylesheet | 为了帮助将主要样式表与任何其他样式表区分开。 |
@summary 标记 | 添加以显式指定用作API描述摘要的文本。默认情况下,API描述的摘要是从第一句话推断出来的。 |
API | Description |
---|---|
LookAndFeels | |
Runtime.getLocalizedInputStream , Runtime.getLocalizedOutputStream | 已过时的国际化机制的一部分,并且没有已知用途。 |
RMI Server-Side Multiplex Protocol Support | 它已在JDK 9中禁用,现在已被删除。 |
Common DOM APIs | com.sun.java.browser.plugin2.DOM和sun.plugin.dom.DOMObject API已被删除。应用程序可以使用netscape.javascript.JSObject来操作DOM。 |
FlatProfiler | 在JDK 9中已弃用,已通过删除实现代码来作废。 |
-Xoss , -Xsqnopause , -Xoptimize , -Xboundthreads , and -Xusealtsigs | 选项已删除。 |
policytool | 从JDK中删除了policytool安全工具。 |
Deprecated Classes in com.sun.security.auth.** | 现在删除以下类。
|
总体而言,Java 10具有许多无涯教程日常编程中可能不会使用的函数,但它仍有许多函数在幕后发挥作用,使其成为重要的里程碑。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)