删除Java 9中的sun.misc.Unsafe将破坏Spring,Hibernate

Llu*_*nez 14 spring java-9

在这里读到,如果Oracle sun.misc.Unsafe在Java 9中删除,Spring和许多其他流行的库将会中断.但是,在Spring或Hibernate中没有对此类的静态引用.那么,这个说法是真的吗?

顺便说一句,Unsafe在Java 8中有64个引用,但如果Oracle删除了该类,它们将更新所有类,并且不会影响库(除非它们Unsafe直接使用).

mko*_*bit 8

马克·莱因霍尔德在2015年JVM语言峰会期间发表了一篇题为"太阳的秘密历史和悲剧命运"的演讲.虽然这些谈判有很多免责声明,但你可以在10:23看到提议的方法,这在JEP260中有所描述.

一般的想法是:

  1. 用更安全,受支持的API替换现有功能
  2. 弃用先前Unsafe已替换的现有API
  3. 删除下一版本中已弃用的代码

以下是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中封装或删除.


use*_*547 5

也许引用不是Spring或Hibernate的核心,而是其他地方.链接的文件说明了春天

Spring框架(通过Objenesis,带有后备)

我试图在我正在进行的项目中搜索Unsafe的用法,因此仍然有一些库可能会破坏.

快速搜索的结果:

  • 番石榴
  • GWT
  • 网状
  • 新泽西州的通用
  • Infinispan的
  • JBoss的模块


Oli*_*POP 5

资源可以正确理解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,不安全应该保留.