没想到java还是发布了java 10版本,之前有新闻说java以后不会更新了,看来是假的,为了更快地迭代,以及跟进社区反馈,Java 的版本发布周期变更为每六个月一次,并且承诺不会跳票。新的发布周期也会严格遵循时间点,将在每年的 3 月份和 9 月份发布。
JEP 286: 局部变量的类型推断。该特性在社区讨论了很久并做了调查,可查看 JEP 286 调查结果
JEP 296: 将 JDK 的多个代码仓库合并到一个储存库中
JEP 304: 垃圾收集器接口。通过引入一个干净的垃圾收集器(GC)接口,改善不同垃圾收集器的源码隔离性。
JEP 307: 向 G1 引入并行 Full GC
JEP 310: 应用类数据共享。为改善启动和占用空间,在现有的类数据共享(“CDS”)功能上再次拓展,以允许应用类放置在共享存档中
JEP 312: 线程局部管控。允许停止单个线程,而不是只能启用或停止所有线程
JEP 313: 移除 Native-Header Generation Tool (javah)
JEP 314: 额外的 Unicode 语言标签扩展。包括:cu (货币类型)、fw (每周第一天为星期几)、rg (区域覆盖)、tz (时区) 等
JEP 316: 在备用内存设备上分配堆内存。允许 HotSpot 虚拟机在备用内存设备上分配 Java 对象堆
JEP 317: 基于 Java 的 JIT 编译器(试验版本)
JEP 319: 根证书。开源 Java SE Root CA 程序中的根证书
JEP 322: 基于时间的版本发布模式。“Feature releases” 版本将包含新特性,“Update releases” 版本仅修复 Bug
以下注释描述了Java SE 10和JDK 10中的一些增强功能。说明中可能包含指向更详细描述增强功能的其他文档的链接。有关Java SE 10和JDK 10中重要增强功能和新功能的另一个信息来源是Java SE 10(18.3)(JSR 383)规范,该规范记录了在Java SE 9和Java SE 10之间制定的规范更改。包括这些新功能的说明和对规范进行更改的增强功能。下面的描述也可能确定迁移到JDK 10时可能遇到的潜在兼容性问题。请参阅兼容性和规范评估(CSR) 页面上的OpenJDK维基页面,了解与JDK 10相关的兼容性信息。
核心库/ java.util中
Optional.orElseThrow()方法 一个新的方法orElseThrow已被添加到Optional课堂上。它是现有get方法的同义词,并且是现在的首选方法。
核心库/ java.util中:收藏 用于创建不可修改集合的API
已经添加了几个新的API,以促进创建不可修改的集合。该List.copyOf,Set.copyOf和Map.copyOf方法从现有实例中创建新的集合实例。新的方法toUnmodifiableList,toUnmodifiableSet以及toUnmodifiableMap已被添加到Collectors在流包类。这些允许流的元素被收集到一个不可修改的集合中。
参见JDK-8177290
芯-SVC / java.lang.management 系统属性以禁用JRE上次使用情况跟踪
引入了新的系统属性jdk.disableLastUsageTracking来禁用正在运行的VM的JRE上次使用情况跟踪。该属性可以在命令行通过使用被设置 -Djdk.disableLastUsageTracking=true或-Djdk.disableLastUsageTracking。使用此系统属性集,无论设置的com.oracle.usagetracker.track.last.usage属性值如何,JRE上次使用情况跟踪都将被禁用usagetracker.properties。
JDK-8192039(不公开)
芯-SVC / javax.management 为开箱即用的JMX代理散列密码
jmxremote.passwordJMX代理现在正在使用SHA3-512散列覆盖文件中的明文密码。该角色的每一行都遵循以下格式:
role_name W hashedPassword
哪里:
散列密码的格式如下:
hashedPassword = base64_encoded_64_byte_salt W base64_encoded_hash W hash_algorithm
哪里:
如果密码是明确的,如果满足以下所有条件,它们将被哈希覆盖:
为了更改角色的密码,请将散列的密码条目替换为新的明文密码或新的散列密码。如果新密码处于清除状态,则在进行新的登录尝试时将用其哈希代替。
给定角色在此文件中至少应有一个条目。如果某个角色没有条目,则无权访问。如果为同一个角色名称找到多个条目,则使用最后一个条目。
用户生成的哈希密码文件也可以用来代替明文密码文件。如果由用户生成,则散列密码必须遵循上面指定的格式。
该文件必须只能由所有者访问,否则程序将退出并出现错误。
为了防止无意中编辑生产环境中的密码文件,建议部署只读哈希密码文件。可以通过运行JMX代理预先生成清除密码的散列条目。
建议在代理运行时不要编辑密码文件。如果客户端连接在外部修改文件的同时触发密码文件散列,则编辑可能会丢失。文件的完整性是有保证的,但是在代理读取文件和写回文件之间的短时间内对文件进行的任何外部编辑可能会丢失。
热点/ GC G1的JEP 307并行完整GC
通过完全GC并行改善G1最坏情况下的延迟。G1垃圾收集器旨在避免完整收集,但是当并发收集无法快速回收内存时,会发生回退完整GC。完整的GC for G1的旧版本使用单线程标记扫描 - 紧凑算法。使用JEP 307,完整的GC已经并行化,现在使用与年轻和混合集合相同数量的并行工作线程。
参见JDK-8172890
安全库/ java.security JEP 319根证书
在JDK中提供一组默认的根证书颁发机构(CA)证书。
cacerts用于Linux x64的OpenJDK 9二进制文件的密钥库已由JEP 319:根证书 [1] 填充,并带有由Oracle的Java SE根CA程序的CA颁发的一组根证书。这解决了cacerts用于Linux x64的OpenJDK 9二进制文件中的空密钥库问题。cacerts由于未安装受信任的根证书颁发机构,空的密钥库阻止了建立TLS连接。作为OpenJDK 9二进制文件的解决方法,用户必须将javax.net.ssl.trustStore系统属性设置为使用不同的密钥库。
[1] https://bugs.java.com/view_bug.do?bug_id= JDK-8191486
参见JDK-8189131
安全库/ javax.net.ssl中 TLS会话哈希和扩展主秘密扩展支持
已为JDK JSSE提供程序中的TLS会话散列和扩展主密钥扩展(RFC 7627)添加了支持。请注意,一般来说,如果未启用端点标识并且以前的握手是会话恢复缩略初始握手,则服务器证书更改会受到限制,除非两个证书所代表的身份可以视为相同。但是,如果启用或协商扩展,则服务器证书更改限制不是必需的,因此将被相应地丢弃。如果出现兼容性问题,应用程序可能会通过将系统属性设置为JDK jdk.tls.useExtendedMasterSecret来禁用此扩展的协商false。通过将系统属性设置jdk.tls.allowLegacyResumption为false,当会话散列和扩展主密钥扩展未协商时,应用程序可拒绝简短握手。通过将系统属性设置jdk.tls.allowLegacyMasterSecret为false,应用程序可拒绝不支持会话散列和扩展主密钥扩展的连接。
工具/ javac的 生成增强for循环的字节码生成
字节码生成已针对增强for循环进行了改进,从而改进了它们的翻译方法。例如:List<String> data = new ArrayList<>(); for (String b : data);
以下是增强后生成的代码:{ /*synthetic*/ Iterator i$ = data.iterator(); for (; i$.hasNext(); ) { String b = (String)i$.next(); } b = null; i$ = null; }
在for循环之外声明迭代器变量允许在不再使用它时立即为其分配空值。这使GC可以访问它,然后可以摆脱未使用的内存。当增强for循环中的表达式是一个数组时,情况类似。
工具/ javadoc的(工具) javadoc支持多种样式表
一个新的javadoc命令行选项--add-stylesheet已被添加到javadoc工具中。新--add-stylesheet选项支持在生成的文档中使用多个样式表。现有的-stylesheetfile选项现在有一个别名,--main-stylesheet以帮助区分主样式表和其他样式表。有关更多详细信息,请参阅javadoc工具的“工具参考”文档。
参见JDK-8185371
工具/ javadoc的(工具) 重写不改变规范的方法
新的选项--overridden-methods=值已被添加到javadoc工具中。许多类在不改变规范的情况下重写继承的方法。该--overridden-methods=值选项可用于组这些方法与其它的继承方法,而不是用在类中声明的其它方法记录他们的细节。有关更多详细信息,请参阅javadoc工具的“工具参考”文档。
参见JDK-8157000
工具/ javadoc的(工具) API说明摘要的注释标记
添加了一个新的内联标签,{@summary ...}以明确指定用作API描述摘要的文本。默认情况下,从第一句推断API描述的摘要。这是通过使用一个简单的算法或java.text.BreakIterator。然而,这种启发式方法并不总是正确的,可能会导致对第一句结尾的错误判断。新的标签可以显式设置API摘要文本而不是推断。请参阅标准Doclet的文档注释规范。
删除的功能和选项
本节介绍在Java SE 10和JDK 10中删除的API,功能和选项。有关Java SE 10和JDK 10中删除的功能和选项的另一信息源是Java SE 10(18.3)(JSR 383)规范,它记录了在Java SE 9和Java SE 10之间制定的规范的更改。此文档包括识别删除的API和未在此处描述的功能。下面的描述还可能确定迁移到JDK 10时可能遇到的潜在兼容性问题。请参阅OpenJDK wiki上的兼容性和规范评审(CSR)页面,以获取与JDK 10相关的兼容性信息。
客户端库 取消对使用旧LookAndFeel的支持
应用程序不再可以使用旧的或不支持的LookAndFeels。某些应用程序(例如Nimbus和Aqua)使用旧的类名来实例化JDK内部的Swing LookAndFeels。例如:
("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
这些类是JDK的内部类,应用程序应始终如此对待它们。使用这些类名实例化JDK内部Swing LookAndFeels的应用程序现在必须迁移到以下API:
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
参见JDK-8185683
核心库/ java.lang中 删除Runtime.getLocalizedInputStream和getLocalizedOutputStream方法
这些方法Runtime.getLocalizedInputStream和Runtime.getLocalizedOutputStream已被删除。它们是过时的国际化机制的一部分,并没有已知的用途。
核心库/ java.rmi中 删除RMI服务器端多路复用协议支持
RMI Multiplex协议在JDK 9中被禁用,并且已被删除。有关背景和历史,请参阅JDK-8087189。
参见JDK-8087189
部署/插件 删除常见的DOM API
该com.sun.java.browser.plugin2.DOM和sun.plugin.dom.DOMObjectAPI已被删除。应用程序可以netscape.javascript.JSObject用来操纵DOM。
热点/运行 拆除FlatProfiler
在JDK 9中弃用的FlatProfiler已通过删除实现代码而过时。通过设置-XprofVM参数来启用FlatProfiler 。该-Xprof版本仍然被认可,但是,设置它将打印出警告消息。
热点/运行 删除过时的-X选项
过时的HotSpot VM选项(-Xoss,-Xsqnopause,-Xoptimize,-Xboundthreads和-Xusealtsigs)已被删除。
对于Aqua使用:
对于Nimbus使用:
javax.swing.UIManager.setLookAndFeel("apple.laf.AquaLookAndFeel");
javax.swing.UIManager.setLookAndFeel
base64_encoded_64_byte_salt = 64字节随机盐
base64_encoded_hash = Hash_algorithm(密码+盐)
W =空格或制表符
hash_algorithm =使用格式https://docs.oracle.com/javase/9/docs/specs/security/standard-names.htmlmessagedigest-algorithms指定的算法字符串。这是个可选的选项。如果未指定,则认为SHA3-512是算法字符串。
role_name是任何不包含空格或制表符的字符串。
W =空格或制表符
com.sun.management.jmxremote.password.toHashes属性在management.properties文件中设置为true 。
密码文件是可写的。
如果配置了安全管理器,则系统安全策略允许写入密码文件。
140.5M / 09-05
76.4M / 03-25
55M / 06-05
237.9M / 04-13
900.9M / 03-02
96.2M / 07-06
311.2M / 07-06
335M / 07-06
200M / 07-06
413.8M / 07-06
484.7M / 09-27
165.4M / 09-05
353.9M / 06-05
131.8M / 04-13
195.6M / 03-03
45.6M / 09-08
665.2M / 07-06
2.84G / 07-06
93M / 07-06
338.3M / 07-06
1.38G / 07-26
488.3M / 07-16
109.8M / 06-03
142M / 01-08
1.2M / 11-23
548.8M / 04-13
1.6M / 04-13
1.48G / 03-18
646.6M / 03-03
133.7M / 03-03
110.5M / 09-05
33.4M / 09-05
325.8M / 08-12
60M / 04-29
254M / 04-25
659M / 04-23
1M / 12-26
253.4M / 12-08
253M / 12-08
1.19G / 11-16
369M / 09-22
181.5M / 09-22
201.2M / 09-05
488.3M / 07-16
248.9M / 12-08
248.9M / 12-08
100.6M / 03-06
148.9M / 03-06
1.12G / 07-06
1.25G / 07-06
1.76G / 09-22
1.92G / 04-17
116.2M / 04-10
201.5M / 04-13
7.31G / 07-01
94.3M / 07-06
2.48G / 07-06
7.63G / 07-06
1M / 07-06
778.1M / 07-06
561.8M / 07-11
72M / 07-06
548.7M / 07-06
1.00G / 07-06
9.13G / 07-06
126.2M / 07-06
72M / 07-06
105.1M / 07-06
132M / 07-06
132M / 07-06