今年的 9 月 21 日,大家期待已久的 Java 9 正式发布,现在开发者即将在几个月后就可以使用下一代 Java —— Java

10。十二月中旬,计划中的 Java 10 开发工具包升级节奏已经逐渐放缓。

java 个人资料更新逻辑 java更新会有什么后果_G1

JDK 10 的主要功能包括:

一个局部变量类型推断,通过增强语言特性将类型推断扩展到局部变量,目的是减少与编码相关的“仪式”,同时保持对静态类型的安全承诺。

一个干净的垃圾收集器接口,用来改善垃圾收集器源代码之间的隔离效果,这样可以为HotSpot 虚拟机中的内部垃圾收集代码提供更好的模块化功能,也可以更容易向

HotSpot 添加新的垃圾收集器。

并行、完整的 G1 垃圾收集器,通过实现并行性来改善最坏情况下的延迟问题。

启用 HotSpot 将对象堆分配给用户指定的备用内存设备(如 NVDIMM 内存模块),这个特性也侧面预示了未来的系统可能会采用异构的内存架构。

在 Linux / x64 平台上以实验性方式启用基于 Java

的即时编译器(https://www.infoworld.com/article/3187868/application-development/oracles-java-on-java-experiment-picks-up-steam.html)。

将 JDK 的多个存储库合并成一个,简化开发。目前的代码库被分解成了多个库,容易出现源代码的管理问题。

应用程序数据共享,通过跨进程共享通用类的元数据,减少空间占用及启动时长。

线程本地握手,不执行全局 VM 安全点也能对线程执行回调,同时实现单线程停止回调。

JDK 提供了一组默认证书,开源 Java SE 的 CA程序,对开发人员更具吸引力。

新的特性和增强一般通过Java Enhancement Process(JEP)或Java Community

Process标准请求(JSR)进行跟踪。因为Java 10的时间线较短,范围也相对较小,所以Java 10的变更将通过JEP进行跟踪。

有望被包含在Java 10中的特性是那些已经处于Targeted或Proposed状态的JEP,它们包括:

286:本地变量类型推断

296:统一JDK仓库

304:垃圾回收器接口

307:G1的并行Full GC

310:应用程序类数据共享

312:ThreadLocal握手机制

JEP 296是一次纯粹的清理工作,而JEP 304加强了不同垃圾回收器的代码隔离,并为垃圾回收器引入更简洁的接口。

JEP

304意味着厂商可以更自由地选择特定的GC算法来构建JDK,因为现在有多种处于开发当中的GC,如Shenandoah、ZGC和Epsilon,在未来可以使用这些GC算法。社区也在努力弃用甚至移除Concurrent

Mark Sweep(CMS)垃圾回收器,只是目前还没有可用的替代品。

比较有意思的变更或许是JEP

286,增强的本地变量类型推断可以让开发者免去很多变量申明模板代码。也就是说,在下一个版本中,下面的变量声明是合法的:

var list = new ArrayList(); // infers ArrayList
var stream = list.stream(); // infers Stream

这种语法只限于初始化过的本地变量和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可以停止单个线程。一些底层小改进包括:

降低堆栈跟踪取样所带来的影响(如进行profiling)。

减少信号依赖以获得更好的堆栈取样。

通过停止单独线程改进偏向锁。

从JVM移除了一些内存屏障。

java 个人资料更新逻辑 java更新会有什么后果_java能给我们带来什me_02

从整体来看,Java 10似乎并没有包含重大新特性或性能改进。这是可以理解的,毕竟这是新发布周期下的第一个版本。