删除 sun.misc.在 Java 9 中不安全将打破春天,休眠

2022-09-04 01:45:05

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

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


答案 1

Mark Reinhold在2015年JVM语言峰会上发表了题为“太阳的秘密历史和悲惨命运”的演讲。虽然这些谈话有很多免责声明,但您可以在10:23看到JEP260中描述的拟议方法。

一般的想法是:

  1. 用更安全、受支持的 API 替换现有功能
  2. 弃用以前存在的已替换的 APIUnsafe
  3. 在下一个版本中删除已弃用的代码

以下是JEP260的一些相关文本(摘自2015年10月20日):

在 JDK 9 中,我们建议:

  • 默认情况下封装所有非关键内部 API:定义它们的模块不会导出其包以供外部使用。(作为最后的手段,在编译时和运行时都可以通过命令行标志访问此类 API,除非出于其他原因修改或删除这些 API。

  • 以相同的方式和相同的最后解决方法封装 JDK 8 中存在受支持替换的关键内部 API。(受支持的替换是 Java SE 8 标准的一部分(即在 java.* 或 javax.* 包中)或特定于 JDK 并用 @jdk 注释的替换。导出(通常在 com.sun.* 或 jdk.* 包中)。

  • 不封装 JDK 8 中不存在受支持替换的关键内部 API,此外,弃用那些在 JDK 9 中支持替换的 API,目的是在 JDK 10 中封装它们,甚至可能删除它们。

...

在 JDK 9 中引入替换的关键内部 API 将在 JDK 9 中弃用,并在 JDK 10 中封装或删除。


答案 2

也许这些引用不在Spring或Hibernate的核心,而是在其他地方。链接的文件说关于春天

Spring Framework(通过 Objenesis,带有后备方案)

我试图在我目前正在处理的项目中搜索Secure的用法,所以仍然有相当多的库可能会中断。

快速搜索结果:

  • 番石榴
  • 断续器
  • 内蒂
  • 泽西-普通
  • 因菲尼斯潘
  • Jboss-Modules

推荐