本文共 1618 字,大约阅读时间需要 5 分钟。
从Java 9发布到现在已经过去两个月了,根据,距离下一个Java版本发布只有四个月时间。Java 10的新特性还在确认当中,所以从现在到GA版中间还是有可能加入重大的变更。不管怎样,在这四个月里,开发者还是可以期待一些新的特性能够被添加到Java 10中。
\\新的特性和增强一般通过(JEP)或标准请求(JSR)进行跟踪。因为Java 10的时间线较短,范围也相对较小,所以Java 10的变更将通过JEP进行跟踪。
\\有望被包含在Java 10中的特性是那些已经处于Targeted或Proposed状态的JEP,它们包括:
\\JEP 296是一次纯粹的清理工作,而JEP 304加强了不同垃圾回收器的代码隔离,并为垃圾回收器引入更简洁的接口。
\\JEP 304意味着厂商可以更自由地选择特定的GC算法来构建JDK,因为现在有多种处于开发当中的GC,如、和,在未来可以使用这些GC算法。社区也在努力,只是目前还没有可用的替代品。
\\比较有意思的变更或许是JEP 286,增强的本地变量类型推断可以让开发者免去很多变量申明模板代码。也就是说,在下一个版本中,下面的变量声明是合法的:
\\var list = new ArrayList\u0026lt;String\u0026gt;(); // infers ArrayList\u0026lt;String\u0026gt;\var stream = list.stream(); // infers Stream\u0026lt;String\u0026gt;\\
这种语法只限于初始化过的本地变量和for循环中的本地变量。
\\它其实是个语法糖,在语义上并没有任何变化。不过,该特性有可能在Java开发者当中引起热议。
\\其他三个变更都将在性能方面带来一些影响。
\\JEP 307解决了G1垃圾回收器的一个问题——截止到Java 9,G1的Full GC采用的是单线程算法。也就是说,G1在发生Full GC时会严重影响性能。JEP 307的目的就是要采用并行GC算法,在发生Full GC时可以使用多个线程进行并行回收。
\\JEP 310对类数据共享(CDS)进行了扩展,JVM可以将一些类记录到一个共享的压缩文件里,在JVM下一次启动时可以将这个文件映射到JVM进程,以此来减少启动时间。该文件也可以在多个JVM间共享,在同一个机器上运行多个JVM时,这样做可以减少内存占用。
\\该功能在Java 5中就已存在,但截止到Java 9,该功能只允许bootstrap类加载器加载压缩的类。JEP 310的目的是扩展该功能,让应用程序和自定义类加载器也能加载压缩的类。该特性目前仅在Oracle JDK中可用,OpenJDK并不包含该特性。
\\JEP计划将该特性从Oracle私有仓库中迁移到公共仓库,从Java 10往后,常规版本(非LTS)将会使用OpenJDK的二进制包。此举表明有用户正在使用该特性,所以需要在OpenJDK中也支持该特性。
\\JEP 312旨在改进虚拟机性能,在应用程序线程上调用回调不再需要执行全局虚拟机安全点操作,这意味着JVM可以停止单个线程。一些底层小改进包括:
\\从整体来看,Java 10似乎并没有包含重大新特性或性能改进。这是可以理解的,毕竟这是新发布周期下的第一个版本。
\\查看英文原文:
转载地址:http://qhfsx.baihongyu.com/