JDK 9是某些功能的终结
几天前宣布JDK 9是Feature Complete! 进行剪切的许多“功能”都是添加项,但有些是删除项。 这篇文章介绍了从OpenJDK和/或Oracle的JDK Java 9中删除的一些项目。
JEP 220 (“模块化运行时图像”)的一部分是删除了Java认可标准覆盖机制 (“意味着可以将实现认可标准或独立技术的更高版本的类和接口合并到Java平台中”)和删除了支持可选包的扩展机制 (“允许Java虚拟机(VM)使用可选扩展的类,其方式与VM使用Java平台中的类的方式几乎相同)”。 可升级模块旨在替代JDK 9中认可的标准替代机制。关于扩展机制,JEP 220指出:“扩展机制是在1998年发布的JDK 1.2中引入的,但是在现代,我们几乎没有证据使用。” Erik Costlow的计划安全删除未充分使用的“认可扩展”目录提供了更多有关这些删除以及如何检测它们是否会影响特定Java应用程序的背景。
rt.jar和tools.jar
JEP 220还删除了众所周知且经常引用的JAR rt.jar和tools.jar 。 JEP 220解释说:“以前存储在lib/rt.jar
, lib/tools.jar
, lib/dt.jar
和其他各种内部jar文件中的类和资源文件现在将以特定于实现的更有效格式存储lib目录中的文件。 这些文件的格式将不指定,如有更改,恕不另行通知。” 有关删除这些JAR的其他详细信息以及这些删除的预期效果,可以在Java 9中找到,它们完全改变了JDK目录的布局并删除了tools.jar , Java 9和Jigsaw如何破坏您的代码以及为JDK 9做准备 。 没有人认为这是广泛宣传 ,这些API的目的不是外用,但“一些流行的库使用不规范,不稳定,不支持的API是JDK的内部实现细节,而且从来没有在外部使用。”
“大多数”内部API(但不是
编写JEP 260 (“封装大多数内部API”)是为了“在[ JDK 9 ]中默认使大多数JDK内部API无法访问,但是保留一些关键的,广泛使用的内部API,直到所有或大多数支持的替代品都存在为止。功能。” Mark Reinhold的消息“ 在JDK 9中封装内部API”(sun.misc.Unsafe等)详细描述了这样做的动机。 在消除内部 (和臭名昭著 )API sun.misc.Unsafe 引起轩然大波之后,这种方法是一种折衷方案。 JEP 260文档详细讨论了哪些内部API将在JDK 9中保持可访问性,并解释说某些内部API将在JDK 9中弃用,并在以后的某个时间完全删除。 “建议在JDK 9中保持访问的关键内部API”包括sun.misc.Unsafe
, sun.misc.Signal
和sun.misc.SignalHandler
。
Java数据库
Oracle的Don Smith 在JDK 9中推迟到Derby的帖子中写道:“ Java DB仅仅是Apache Derby开源数据库的重新命名发行版。 它包含与Apache Derby相同的二进制文件。 从JDK 9开始,不再计划将其包含在Oracle JDK下载的'db'目录中。 展望JDK 9的开发人员应计划出于同一目的独立获取和捆绑Apache Derby。” 在撰写本文时, Oracle Java DB页面指出:“ Java DB是Oracle支持的Apache Derby开源数据库发行版。 它通过JDBC和Java EE API支持标准的ANSI / ISO SQL。 JDK中包含Java DB。” 从JDK 9开始将不再是这种情况。
自JDK 8起已弃用垃圾收集器选项
如OpenJDK页面JDK 9 Outreach的“已删除”部分和JEP 214中所述 , JDK 8中不推荐使用的“很少使用”垃圾收集选项组合现在已被完全删除(这意味着包含这些选项组合将阻止JVM而不是简单地显示警告消息)。 以下是要删除的垃圾收集选项的组合:
DefNew + CMS |
-XX:-UseParNewGC -XX:+UseConcMarkSweepGC
|
ParNew + SerialOld |
-XX:+UseParNewGC
|
ParNew + iCMS |
-Xincgc
|
ParNew + iCMS |
-XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC
|
DefNew + iCMS |
-XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC -XX:-UseParNewGC
|
CMS前景 |
-XX:+UseCMSCompactAtFullCollection
|
CMS前景 |
-XX:+CMSFullGCsBeforeCompaction
|
CMS前景 |
-XX:+UseCMSCollectionPassing
|
贾特
JEP 241被称为“删除jhat
工具”,其简洁的“摘要”为“删除过时的jhat工具”。 在JDK-8059039中解释了删除jhat的动机,“ jhat
是在JDK 6中基于java.net HAT项目添加的 。 jhat
是一个实验性的,不受支持的且过时的工具。 优质的堆可视化器和分析器现已问世多年。” jhat
替代jhat
包括Eclipse Memory Analyzer Tool(MAT)和VisualVM 。 OpenJDK JDK 9 Outreach文档中也记录了此删除操作,并且在文章OpenJDK 9:没有HPROF和jhat的生活中提到了此删除操作 。
Java虚拟机工具接口hprof代理
JEP 240从JDK中删除了JVM TI hprof代理。 关于HPROF的JDK 8技术说明:堆/ CPU分析工具指出(我已经强调了 ),“ Java 2平台标准版(J2SE) 始终为堆和cpu分析提供了一个简单的命令行分析工具HPROF。 HPROF实际上是一个JVM本机代理程序库,它在JVM启动时通过命令行选项动态加载,并成为JVM进程的一部分。” 如用于删除它的JDK-8046661中所述,还有其他一些可用于生成“ hprof
格式的堆转储”的方法,包括jmap -dump和jcmd <pid> GC.heap_dump 。 JDK 9扩展页面上也对此进行了引用,并在文章OpenJDK 9:没有HPROF的生活和jhat中对此进行了讨论 。
虚拟机
Oracle的Aurelio Garcia-Ribeyro 在JDK 9和更高版本的Visual VM中写道:“从JDK 9开始,Visual VM将不包括在Oracle JDK中”,并补充说:“希望将Visual VM与Oracle JDK 9或更高版本一起使用的开发人员。以后可以从Visual VM开源项目站点获取它。 这似乎与Oracle先前决定将NetBeans捐赠给Apache Software Foundation (VisualVM 基于NetBeans Platform )有关。 代替删除的jhat
工具和HPROF代理,要使用的主要工具之一也需要单独下载以与JDK 9一起使用。
AppleScript引擎
AppleScript引擎代码随JDK 9一起删除,并且此删除记录在OpenJDK页面JDK 9 Outreach的“已删除”部分中。
来自RMI的HTTP代理
RDK的HTTP代理已在JDK 8中弃用,并且已从JDK 9中删除 。 这在“ JDK 9扩展”页面上被调用。
java.corba和EE模块的默认分辨率
JDK 9中仍然可以使用java.corba和其他EE模块,但是默认情况下它们不再可见 。 六个模块“默认情况下将不可见”是java.activation , java.annotations.common , java.corba (不推荐使用), java.transaction , java.xml.bind和java.xml.ws。 JEP 261对此进行了更详细的描述,并解释说:“默认情况下,类路径上的代码不会解析定义Java EE API或Java EE应用程序主要感兴趣的API的模块。” 它称此更改为“有意的选择,如果不是很痛苦的话”,旨在“避免与在某些相同程序包中定义类型的流行库产生不必要的冲突”,并“使现有应用程序服务器更容易迁移到JDK 9”。
JEP 182的“摘要”(“淘汰javac -source和-target选项的政策”)指出:“为减少javac
的维护成本,该JEP定义了-target
旧的-source
和-target
选项的策略。 在JDK 8中,将不赞成使用1.5或更早版本的源或目标,而在JDK 9中,将删除对1.5或更早版本的源或目标的支持。 在JDK 9及以后的版本中,javac将使用受支持的源和目标选项的“一加三后退”策略。 根据这一政策, javac
仍然能够识别和处理所有以前的JDK的类文件,可以追溯到JDK 1.0.2生成的版本45.3的类文件,该版本于1996年首次发布。
根据JEP 182中概述的策略,JDK 9通过JDK-8011044 “删除了对1.5及更早版本的源和目标选项的支持”。 Joe Darcy在交付时描述了此更改,“ javac
命令不再支持低于6 / 1.6的-source
或-target
选项。 但是, javac
仍然可以读取较旧的类文件。 可以将较早版本的源代码移植到较新的源代码级别。 为了生成旧版本可用的类文件,可以使用以前版本中的javac
。”
其他拆除
OpenJDK JDK 9扩展页面的“已删除”部分简要引用了我在本文中讨论的一些项目,还引用了我在本文中未提及的从JDK 9中删除的一些项目:
- JEP 231 (“删除启动时JRE版本选择”):“删除在JRE启动时请求不是JRE版本的JRE版本的能力。”
- JDK-8037739 :“在JDK 9时间范围内删除对java.awt.peer和java.awt.dnd.peer包的API引用”
- JDK-8029806 :“删除打包程序/解包程序的addPropertyChangeListener和removePropertyListener方法”
- JDK-8029805 :“删除LogManager addPropertyChangeListener和removePropertyChangeListener方法”
- JDK-8029904 :““删除com.sun.security.auth.callback.DialogCallbackHandler”
- JDK-7067728 :“从默认的java.policy中删除stopThread RuntimePermission”
- JDK-8134808 :“从java.desktop中删除对序列化小程序的支持”
结论
由于对JDK 所做的更改以支持模块化( JEP 200 ),因此许多从JDK 9中删除的项目也将被删除。 因为有更好的替代支持,或者因为JDK以前包含的产品现在希望单独下载,所以其他项目也被删除。
翻译自: https://www.javacodegeeks.com/2017/01/jdk-9-end-road-features.html
JDK 9是某些功能的终结相关推荐
- JDK 9已完成功能!
今天的马克·莱因霍尔德 ( Mark Reinhold)消息JDK 9已完成功能完善-现在该降级了 , 它宣布JDK 9的"总体功能集已冻结". 甲骨文Java平台小组的首席架构师 ...
- jdk 9和jdk8_JDK 9是某些功能的终结
jdk 9和jdk8 几天前宣布JDK 9是Feature Complete! 进行切割的许多"功能"是附加功能,但有些是移除功能. 这篇文章介绍了一些从OpenJDK和/或Ora ...
- JDK 11:Java序列化的终结开始了吗?
在博客文章" 将Google的协议缓冲区与Java结合使用 "中,我引用了乔什·布洛赫(Josh Bloch)的第三版的有效Java ,他写道:"没有理由在您编写的任何新 ...
- Java JDK 11:现在可以使用所有新功能
为什么80%的码农都做不了架构师?>>> 删除了CORBA,Java EE和JavaFX支持,但添加了十几个主要新功能 目录 哪里可以下载JDK 11 Java 11 JDK中 ...
- jdk 9和jdk8_JDK 9已完成功能!
jdk 9和jdk8 今天的Mark Reinhold消息JDK 9已完成功能完善-现在该降级了 , 它宣布JDK 9的"总体功能集已冻结". OracleJava平台小组的首席架 ...
- jdk 1.8 jdk8_JDK 8功能的可疑方面
jdk 1.8 jdk8 我们大多数使用Java进行开发的人通常都热衷于JDK 8附带的功能和改进. 但是,最近有几篇文章指出了某些功能可能会被滥用和滥用,并可能在将来导致一些其他问题. 这些功能使我 ...
- 欢迎使用Java 8之前要重温的10个JDK 7功能
Java 8发布已经快一个月了,我敢肯定,大家都在探索JDK 8的新功能.但是,在您完全研究Java 8之前,是时候重新审视Java 7上引入的一些很棒的功能了.记住,Java 6并没有什么功能,它只 ...
- JDK 8功能的可疑方面
我们大多数使用Java进行开发的人通常都热衷于JDK 8附带的功能和改进. 但是,最近有几篇文章指出了某些功能可能会被滥用和滥用,并可能在将来导致其他问题. 这些功能使我想起了J2SE 5中引入的自动 ...
- 一文汇总 JDK 5 到 JDK 15 中的牛逼功能!
前言 JDK 16 马上就要发布啦(预计 2021.3.16 日发布),所以在发布之前,让我们先来回顾一下 JDK 5-15 的新特性吧,大家一起学起来~ Java 5 新特性 1. 泛型 泛型本质是 ...
最新文章
- 搜索引擎是如何判断网站质量的?
- checkbox全选衍生问题讨论
- 近世代数--整环的商域--整环D扩充为域Q
- 一篇文章教你学会Java基础I/O流
- 洛谷T1874 快速求和
- 单片机开发设计之十层功力
- 【Django】Django web项目部署(Nginx+uwsgi)
- 【C语言进阶深度学习记录】三十五 程序中的堆、栈以及静态存储区(数据区)
- linux 每日学一点《明明白白配置lilo启动引导器》
- const与修饰函数形参
- Oracle exists与not exists的用法总结
- Zeppelin的求学之路(1)—— 简介 和 从源码Build的安装并配置他的Spark解析器
- springCloud项目不能向EurekaServer 注册多个EurekaClient时(端口不一致)方法及踩坑经历
- 计算机专业英语辅导教材,计算机专业英语2全套教材.ppt
- 华为服务器故障灯不开机_华为服务器
- Typora 是什么?
- 关于相对论的一个猜想——二维空间理论
- 钢铁侠2 蓝光BD高清下载
- 关于信息搜集的部分介绍
- 25岁之前,男生一定要知道的30条人生忠告!!!