我在这里读到,如果Oracle sun.misc.Unsafe在Java 9中删除,Spring和许多其他流行的库将会中断.但是,在Spring或Hibernate中没有对此类的静态引用.那么,这个说法是真的吗?
顺便说一句,Unsafe在Java 8中有64个引用,但如果Oracle删除了该类,它们将更新所有类,并且不会影响库(除非它们Unsafe直接使用).
马克·莱因霍尔德在2015年JVM语言峰会期间发表了一篇题为"太阳的秘密历史和悲剧命运"的演讲.虽然这些谈判有很多免责声明,但你可以在10:23看到提议的方法,这在JEP260中有所描述.
一般的想法是:
Unsafe已替换的现有API以下是JEP260的一些相关文字(摘自2015年10月20日):
在JDK 9中,我们建议:
默认情况下封装所有非关键内部API:定义它们的模块不会导出其包以供外部使用.(作为最后的手段,在编译时和运行时都可以通过命令行标志访问此类API,除非出于其他原因修改或删除这些API.)
以相同的方式和相同的最后解决方法封装JDK 8中存在受支持替换的关键内部API.(受支持的替换是Java SE 8标准的一部分(即,在java.*或javax.*包中),或者是JDK特定的,并使用@ jdk.Exported注释(通常在com.sun中.*或jdk.*包).)
不封装JDK 8中不存在受支持的替换的关键内部API,并且在JDK 10中不再使用支持JDK 9替换的API,以便封装它们,甚至可能删除它们.
...
JDK 9中引入了替换的关键内部API将在JDK 9中弃用,并在JDK 10中封装或删除.
也许引用不是Spring或Hibernate的核心,而是其他地方.链接的文件说明了春天
Spring框架(通过Objenesis,带有后备)
我试图在我正在进行的项目中搜索Unsafe的用法,因此仍然有一些库可能会破坏.
快速搜索的结果:
该资源可以正确理解JDK 9的当前状态及其功能.社区开始讨论与Unsafe及其未来的未来相关的Java.给定的文档是社区对JEP-260作出反应的建议,该建议隐藏了一些内部API,但保留了一些关键API,其中包括不安全的.从文档本身中提取:
建议在JDK 9中保持可访问的关键内部API包括:
sun.misc.Cleaner
sun.misc {信号,SignalHandler}
sun.misc.Unsafe(此类中许多方法的功能现在可通过变量句柄(JEP 193)获得.)
sun.reflect.Reflection :: getCallerClass(此方法的功能可以通过JEP 259以标准形式提供.)
sun.reflect.ReflectionFactory
总而言之,至少基于给定的 JEP,不安全应该保留.
| 归档时间: |
|
| 查看次数: |
3199 次 |
| 最近记录: |