Java SE Development Kit 10是一款由Oracle公司推出的Java语言的软件开发工具包套件,它是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar),主要用于移动设备、嵌入式设备上的java应用程序。用户想要在电脑上运行JAVA程序,需要先安装JDK环境!
Java SE10软件功能
1、java小程序和Web启动代码签名
从java SE 7u21所有java小应用程序和网页开始应用鼓励与信任的证书签名。
2、java平台的安全
由角色提供的安全信息的描述。对于开发人员、系统管理员、家庭用户和安全专业人员。
3、配置规则集
配置规则集允许桌面管理控制水平的java客户端兼容性和默认提示整个组织。
4、服务器的JRE
从java SE 7u21,服务器的java运行环境(服务器JRE)包可用于部署java应用服务器。
5、java任务控制
java飞行记录器和java任务控制共同创造一个完整的工具链不断收集低水平和详细的运行时信息使事实事件分析后。
6、先进的管理控制台
为系统管理员提供在不同的java版本对企业实现更安全的环境和增强的应用经验和可用性的桌面运行的有效控制。
新特色
1.局部变量类型推断
局部变量类型推断可以说是Java 10中最值得注意的特性,这是Java语言开发人员为了简化Java应用程序的编写而采取的又一步,如下图所示。
这个新功能将为Java增加一些语法糖 – 简化它并改善开发者体验。新的语法将减少与编写Java相关的冗长度,同时保持对静态类型安全性的承诺。局部变量类型推断将引入”var”关键字,也就是你可以随意定义变量而不必指定变量的类型,如下图:将被下面这个新语法所取代:
看完是不是有点JS的即视感???越来越像JS了吗?!虽然类型推断在Java中不是一个新概念,但在局部变量中确是很大的一个改进。
说到类型推断,从JDK 5引进泛型,到JDK 7的”<>”操作符允许不绑定类型而初始化List,再到JDK 8的Lambda表达式,再到现在JDK 10的局部变量类型推断,Java类型推断正大刀阔斧的向前发展。
2. GC改进和内存管理
JDK 10中有2个JEP专门用于改进当前的垃圾收集元素。
第一个垃圾收集器接口是(JEP 304),它将引入一个纯净的垃圾收集器接口,以帮助改进不同垃圾收集器的源代码隔离。
预定用于Java 10的第二个JEP是针对G1的并行完全GC(JEP 307),其重点在于通过完全GC并行来改善G1最坏情况的等待时间。G1是Java 9中的默认GC,并且此JEP的目标是使G1平行。
3. 线程本地握手(JEP 312)
JDK 10将引入一种在线程上执行回调的新方法,因此这将会很方便能停止单个线程而不是停止全部线程或者一个都不停。
4. 备用内存设备上的堆分配(JEP 316)
允许HotSpot VM在备用内存设备上分配Java对象堆内存,该内存设备将由用户指定。
5. 其他Unicode语言 – 标记扩展(JEP 314)
目标是增强java.util.Locale及其相关的API,以便实现语言标记语法的其他Unicode扩展(BCP 47)。
6. 基于Java的实验性JIT编译器
Oracle希望将其Java JIT编译器Graal用作Linux / x64平台上的实验性JIT编译器。
7. 根证书(JEP 319)
这个的目标是在Oracle的Java SE中开源根证书。
8. 根证书颁发认证(CA)
这将使OpenJDK对开发人员更具吸引力,它还旨在减少OpenJDK和Oracle JDK构建之间的差异。
9. 将JDK生态整合单个存储库(JEP 296)
此JEP的主要目标是执行一些内存管理,并将JDK生态的众多存储库组合到一个存储库中。
10. 删除工具javah(JEP 313)
从JDK中移除了javah工具,这个很简单并且很重要。
新增功能
1、核心库/ java.util中
Optional.orElseThrow()方法
一个新的方法orElseThrow已被添加到Optional课堂上。它是现有get方法的同义词,并且是现在的首选方法。
2、核心库/ java.util中:收藏
用于创建不可修改集合的API
已经添加了几个新的API,以促进创建不可修改的集合。该List.copyOf,Set.copyOf和Map.copyOf方法从现有实例中创建新的集合实例。新的方法toUnmodifiableList,toUnmodifiableSet以及toUnmodifiableMap已被添加到Collectors在流包类。这些允许流的元素被收集到一个不可修改的集合中。
3、芯-SVC / java.lang.management
系统属性以禁用JRE上次使用情况跟踪
引入了新的系统属性jdk.disableLastUsageTracking来禁用正在运行的VM的JRE上次使用情况跟踪。该属性可以在命令行通过使用被设置 -Djdk.disableLastUsageTracking=true或-Djdk.disableLastUsageTracking。使用此系统属性集,无论设置的com.oracle.usagetracker.track.last.usage属性值如何,JRE上次使用情况跟踪都将被禁用usagetracker.properties。
4、芯-SVC / javax.management
为开箱即用的JMX代理散列密码
jmxremote.passwordJMX代理现在正在使用SHA3-512散列覆盖文件中的明文密码。该角色的每一行都遵循以下格式:
role_name W hashedPassword
Where:
role_name是任何不包含空格或制表符的字符串。
W =空格或制表符
散列密码的格式如下:
hashedPassword = base64_encoded_64_byte_salt W base64_encoded_hash W hash_algorithm
Where:
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是算法字符串。
如果密码是明确的,如果满足以下所有条件,它们将被哈希覆盖:
com.sun.management.jmxremote.password.toHashes属性在management.properties文件中设置为true 。
密码文件是可写的。
如果配置了安全管理器,则系统安全策略允许写入密码文件。
为了更改角色的密码,请将散列的密码条目替换为新的明文密码或新的散列密码。如果新密码处于清除状态,则在进行新的登录尝试时将用其哈希代替。
给定角色在此文件中至少应有一个条目。如果某个角色没有条目,则无权访问。如果为同一个角色名称找到多个条目,则使用最后一个条目。
用户生成的哈希密码文件也可以用来代替明文密码文件。如果由用户生成,则散列密码必须遵循上面指定的格式。
该文件必须只能由所有者访问,否则程序将退出并出现错误。
为了防止无意中编辑生产环境中的密码文件,建议部署只读哈希密码文件。可以通过运行JMX代理预先生成清除密码的散列条目。
建议在代理运行时不要编辑密码文件。如果客户端连接在外部修改文件的同时触发密码文件散列,则编辑可能会丢失。文件的完整性是有保证的,但是在代理读取文件和写回文件之间的短时间内对文件进行的任何外部编辑可能会丢失。
5、热点/ GC
G1的JEP 307并行完整GC
通过完全GC并行改善G1最坏情况下的延迟。G1垃圾收集器旨在避免完整收集,但是当并发收集无法快速回收内存时,会发生回退完整GC。完整的GC for G1的旧版本使用单线程标记扫描 - 紧凑算法。使用JEP 307,完整的GC已经并行化,现在使用与年轻和混合集合相同数量的并行工作线程。
6、安全库/ 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系统属性设置为使用不同的密钥库。
7、安全库/ javax.net.ssl中
TLS会话哈希和扩展主秘密扩展支持
已为JDK JSSE提供程序中的TLS会话散列和扩展主密钥扩展(RFC 7627)添加了支持。请注意,一般来说,如果未启用端点标识并且以前的握手是会话恢复缩略初始握手,则服务器证书更改会受到限制,除非两个证书所代表的身份可以视为相同。但是,如果启用或协商扩展,则服务器证书更改限制不是必需的,因此将被相应地丢弃。如果出现兼容性问题,应用程序可能会通过将系统属性设置为JDK jdk.tls.useExtendedMasterSecret来禁用此扩展的协商false。通过将系统属性设置jdk.tls.allowLegacyResumption为false,当会话散列和扩展主密钥扩展未协商时,应用程序可拒绝简短握手。通过将系统属性设置jdk.tls.allowLegacyMasterSecret为false,应用程序可拒绝不支持会话散列和扩展主密钥扩展的连接。
8、工具/ javac的
生成增强for循环的字节码生成
字节码生成已针对增强for循环进行了改进,从而改进了它们的翻译方法。例如:
List 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循环中的表达式是一个数组时,情况类似。
9、工具/ javadoc的(工具)
javadoc支持多种样式表
一个新的javadoc命令行选项--add-stylesheet已被添加到javadoc工具中。新--add-stylesheet选项支持在生成的文档中使用多个样式表。现有的-stylesheetfile选项现在有一个别名,--main-stylesheet以帮助区分主样式表和其他样式表。
10、工具/ javadoc的(工具)
重写不改变规范的方法
新的选项--overridden-methods=值已被添加到javadoc工具中。许多类在不改变规范的情况下重写继承的方法。该--overridden-methods=值选项可用于组这些方法与其它的继承方法,而不是用在类中声明的其它方法记录他们的细节。
11、工具/ javadoc的(工具)
API说明摘要的注释标记
添加了一个新的内联标签,{@summary ...}以明确指定用作API描述摘要的文本。默认情况下,从第一句推断API描述的摘要。这是通过使用一个简单的算法或java.text.BreakIterator。然而,这种启发式方法并不总是正确的,可能会导致对第一句结尾的错误判断。新的标签可以显式设置API摘要文本而不是推断。