Java Development Kit的最新版本Java 11 已经发布。自从JDK Beta于1995年首次亮相以来,这种高级通用编程语言的平台不断发展。
Java 11的发布只遵循Java 10 6个月。这符合Java平台首席架构师Mark Reinhold在2017年提出的建议。他建议以每年两次的发布周期取代两年的时间表。
目前,Java 8和Java 11是LTS(长期支持)版本。Java 8的公共更新结束计划于2019年1月进行商业用途。对于非商业用途,计划在2020年12月的未指定日期进行。
除了所有添加,删除和弃用的功能之外,Java 11的有趣之处在于Oracle不支持它。取而代之的是,OpenJDK社区将提供长期支持,最有可能的形式是AdoptOpenJDK。
其他Java版本怎么样?
随着Java 11的发布,对Java 10的支持已经结束。这是因为它是一个快速发布版本,如Java 9,其中包含的支持也已被删除。
尽管组织在商业基础上仍然支持Java 8之前的JDK版本,但强烈建议卸载pre-Java 8,尤其是从Windows计算机上卸载。在回答这个问题之前:“Java 11何时将Java 8替换为Java的默认版本?”,让我们首先更好地了解Java 11。
Java 11中的新功能
每个Java版本都引入了许多新功能。然而,这一次,它更大更好。Java 11为现有功能列表添加了许多新功能。以下是一些最重要的内容:
附加
10个新剧本,包括Adlam,Newa,Tangut和Zanabazar Squar
可扩展的低延迟垃圾收集器ZGC或Z垃圾收集器与Epsilon GC一起添加,Epsilon GC是一个实验性的无操作垃圾收集器
通过JVMTI可访问,现在可以使用低开销的堆分析
toArray (IntFunction) 在java.util.Collection接口中添加新的默认方法
可提供ChaCha20和ChaCha20-Poly1305密码。ChaCha20是一种新的流密码,旨在取代旧的,不安全的RC4流密码
结合Unicode 9.0.0和10.0.0
增强的SunEC提供商,支持4个额外的Brainpool曲线
使用Curve25519和Curve448实施新的密钥协商方案
改进的Java启动程序,用于运行作为Java源代码的单个文件提供的程序
包括TLS 1.3的实现
介绍 jceks.key.serialFilter,安全财产
JVM现在支持将类和接口安排到一个嵌套中,这是一个全新的访问控制上下文
新命令行标志,-XX:+ UseDynamicNumberOfCompilerThreads。它被添加到动态控制编译器线程
RSASSA-PSS签名算法支持添加到SunMSCAPI提供程序
标准化HTTP客户端
支持aes128-cts-hmac-sha256-128和aes256-cts-hmac-sha384-192的Kerberos 5加密类型
基于Unicode Consortium的CLDR(公共区域设置数据注册表)更新的区域设置数据
var,保留类型名称,在声明lambda表达式的形式参数时可用
清除
Java Development Kit的最新版本不仅引入了大量功能,而且还削弱了它的一些旧功能。其中大多数已在以前的Java版本中弃用。JDK 11中不再提供的功能和选项包括:
该 appletviewer 工具。它在JDK 9中被折旧
捆绑的字体。因此,JDK 11仅依赖于操作系统上安装的字体
com.sun.awt.AWTUtilities class,在JDK 10中获得折旧
CORBA和Java EE模块
JavaFX模块,现在可作为一组单独的模块使用
Java插件和Java WebStart技术。用于配置部署技术的Java控制面板与共享系统JRE和JRE自动更新机制一起被删除
jdk.snmp模块
JMC(Java Mission Control)。但是,它可作为单独的可下载模块使用
通过SNMP,JVM-MANAGEMENT-MIB.mib进行JVM监视和管理的规范
sun.misc.Unsafe.defineClass 类。它的替代品是 java.lang.invoke.MethodHandles.Lookup.defineClass
sun.nio.ch.disableSystemWideOverlappingFileLockCheck 和 sun.locale.formatasdefault 属性
javax.imageio JPEG插件不再支持使用alpha的图像
Thread.destroy() 和 Thread.stop(Throwable) 方法
贬值
随着Java平台的每个主要版本的发布,包含和排除都会有一些贬值。JDK 11弃用:
命令行参数 -XX:+UnlockCommericalFeatures 和 -XX:+LogCommercialFeatures
jcmd命令: VM.check_commercial_features 和 VM.unlock_commercial_features
Nashorn JavaScript引擎,相应的API和jjs工具
java.util.jar和pack200以及unpack200工具中的Pack200 API
基于流的GSSContext方法,其中包括 acceptSecContext, getMIC, initSecContext, unwrap, verifyMIC,和 wrap
ThreadPoolExecutor,关闭线程池的finalize方法什么都不做
VM选项-XX:+ AggressiveOpts
请查看此内容,以获取有关JDK 11中添加,删除和弃用的详细信息。
那么什么时候Java 11将Java 8替换为默认Java?
最简单的答案是:不是很快!我们已经讨论过,一些组织和个人仍然依赖于Java 8之前的版本来继续运营。对于Java 8也是如此。此外,它是一个LTS版本,这意味着它将超过快速发布版本。
支持这一想法的另一个论点是Java 11相对较新。因此,需要一些时间来获得牵引力。大多数已经开始使用Java 8部署的企业将继续从中获益。
无法决定使用哪一个来使用Java 11?OpenJDK或Oracle JDK。嗯,这是两者之间的对比,以帮助您做出选择。
OpenJDK比。Oracle JDK
尝试使OpenJDK和Oracle JDK二进制文件尽可能相似的尝试正在进行中。尽管如此,在Java的第11个主要版本中,两者之间仍有几个不同之处。一些最重要的是:
API,如javafx和资源管理,不包含在OpenJDK二进制文件中,而是包含在Oracle JDK二进制文件中
OpenJDK允许使用未签名的第三方加密提供程序,而Oracle JDK要求使用Oracle提供的证书对这些提供程序进行签名
OpenJDK仅提供Java Development Kit,而Oracle JDK另外提供Java Runtime Environment
OpenJDK可用作压缩存档(tar.gz或.zip)。相反,Oracle JDK可用作安装程序(deb,msi,deb等)
OpenJDK在GPLv2wCP许可下可用,而Oracle JDK在OTN许可下发布
java -version的输出在OpenJDK中与在Oracle JDK中不同
\ legal \ java.desktop \ freetype.md的内容对于OpenJDK和Oracle JDK都是不同的
使用日志记录是Oracle JDK独有的
使用-XX:+ UnlockCommercialFeatures标志将导致OpenJDK抛出错误并暂停。相反,在Oracle JDK中使用相同的内容将打印警告,但执行将继续
虽然OpenJDK提供Alpine Linux,但Oracle JDK提供Solaris
希望这有助于您进行JDK选择!