灾难将至,Java 9中将移除 Sun.misc.Unsafe

Oracle 正在计划在Java 9中去掉 sun.misc.Unsafe API。 这绝对将是一场灾难,有可能会彻底破坏整个 java 生态圈。 几乎每个使用 java开发的工具、软件基础设施、高性能开发库都在底层使用了 sun.misc.Unsafe。 下面是上面链接中文档提到一个小列表:

Netty

Hazelcast

Cassandra

Mockito / EasyMock / JMock / PowerMock

Scala Specs

Spock

Robolectric

Grails

Neo4j

Spring Framework

Akka

Apache Kafka

Apache Wink

Apache Storm

Apache Hadoop

Apache Continuum

… 这个列表很长。。。

然而, Oracle 看起来是铁了心毫无理由的去掉它。下面是一个来自他们邮件列表的评论: n

恕我直言 — sun.misc.Unsafe 必须死掉。 它是“不安全”的。它必须被废弃。请忽略一切理论上(想象中的)羁绊,从此走上正确的道路吧。

这个工程师似乎是毫无根据的憎恨 Unsafe。。。

Oracle应该怎么做?

当前Unsafe 类是一个强有力的工具。 没有必要去掉它。对这个类的特性有些明确的需求,这就是为什么事实上几乎每个 Java 程序都在使用它,不知不觉中许多流行的 Java库也在使用它。

提供完整的文档、发布 Unsafe 类

Oracle 应该接受现实,并将Unsafe转为公开 API,提供完善的文档和开发示例。 当前,没有准确的文档,开发中需要通过 stackoverflow 帖子或者其他一些随机的博客学习怎么使用 Unsafe。 移除 Unsafe 的一个主要论据是:使用它太容易让开发中犯错了。如果有完善的官方文档或许可以改善这一现状。

随 Unsafe一起发布新的替代 API

除了 Unsafe 文档外,Oracle 应该发布一个更易用的 API,提供 Unsafe 相同的功能。 这是上面文档中的提议的一部分。然而这不太应该以移除 Unsafe 为代价。 人们在开发新软件的时候就会逐步过渡到新的 API,Unsafe 就自动被废弃了。

这类似于向 Java 8引入 java.time 包中的新的 DateTime API。 新的日期 API 的引入并不表示之前的DateTime API 被彻底移除或者隐藏到某个特殊 JVM flag 里。那样也肯定会引发一些事故。

实际上最可能会变成什么样子?

根据事情的发展趋势,Oracle 看起来会:

在 Java 9正常模式下移除 Unsafe 类。

仅在必须的情况下通过向 JVM 传递一个特殊的 flag 启动 Unsafe

这将导致绝对的灾难!

不仅类似 Cassandra 或Zookeeper 等基础软件,几乎所有的 Java 程序,包括 web 应用也会挂掉,因为他们使用的基础库可能在底层使用了 Unsafe。

从此打开 Unsafe flag 将会成为启动 JVM 的默认 flag 之一,因为如果不打开它的话 Java 应用会在毫无提示的情况下崩溃。

因为大多数环境不会默认把这个JVM flag 打开,当他们的系统升级 Java时软件系统会挂掉。 Java 打破了向后兼容的承诺。所有的基础库、软件基础设施从此变为两个版本:

Java 9之前的版本 – 使用 Unsafe

Java 9兼容 – 不使用 Unsafe。

迁移至 Java 9的进程会因此而变缓慢,这将影响整个 Java 生态系统。这将会类似于 Python 2升级到 Python 3的过程。

这种错误 JVM 社区之前曾经犯过

你是不是任务这太荒唐了,Oracle 绝不可能犯这样的错误?事实上它曾做过类似的事情了, 例如Java 7中的字节码校验器。

结论

现在是该让大家开始意识到这个问题的时候了。从 JVM中去掉Unsafe或者把它隐藏在某个特殊的 flag 里面势必导致一场灾难。

参考链接

unsafehelper java_Java 9中将移除 Sun.misc.Unsafe相关推荐

  1. 一文了解sun.misc.Unsafe

    Java语言和JVM平台已经度过了20岁的生日.它最初起源于机顶盒.移动设备和Java-Card,同时也应用在了各种服务器系统中,Java已成为物联网(Internet of Things)的通用语言 ...

  2. 字体对话框java实验_Java Web安全 || Java基础 sun.misc.Unsafe

    点击上方"凌天实验室","星标或置顶公众号" 漏洞.技术还是其他,我都想第一时间和你分享 " [历史]已连载更新全部内容:[菜单栏]-[JAVA SE ...

  3. sun.misc.Unsafe苦难告诉我们什么

    Oracle将删除Java 9中的内部sun.misc.Unsafe类 . 尽管大多数人可能对这种变化漠不关心,但其他一些人(主要是图书馆开发人员)并非如此. 博客圈中最近有几篇文章描绘了这种变化所暗 ...

  4. openJDK之sun.misc.Unsafe类CAS底层实现

    2019独角兽企业重金招聘Python工程师标准>>> 注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html,而后自己结合 ...

  5. 【Java报错】记录一次 sun.misc.Unsafe.park(Native Method) Conflicting setter definitions for property 导致的内存泄露

    1. 报错信息 2021-10-29 08:44:56 WARN [,,,] [main] o.a.c.loader.WebappClassLoaderBase - The web applicati ...

  6. sun.misc.Unsafe操作手册

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  7. 聊聊高并发(十七)解析java.util.concurrent各个组件(一) 了解sun.misc.Unsafe类

    了解了并发编程中锁的基本原理之后,接下来看看Java是如何利用这些原理来实现各种锁,原子变量,同步组件的.在开始分析java.util.concurrent的源代码直接,首先要了解的就是sun.mis ...

  8. unsafe jdk9_JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等

    unsafe jdk9 Java 9距离(希望)数月了,现在该回顾一下即将发生的变化以及您应该采取的措施 Java 9即将来临(我们正在计算到达的日子 ),其中包含一系列新功能和改进功能. 这就是为什 ...

  9. JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等

    Java 9距离(希望)数月了,现在该讨论一下即将发生的变化以及您应该采取的措施 Java 9即将来临(我们正在计算到达的日子 ),其中包含一系列新功能和改进功能. 这就是为什么我们决定创建一份清单来 ...

最新文章

  1. 神策数据司沛:加速车企数字化转型,搭建高质量用户数据平台实战
  2. c语言控制台数字键打地鼠,自己用C写的一个简单的打地鼠游戏代码出了个问题(鼠标和循环不能...
  3. Django创建项目的命令
  4. Eclipse运行项目报Could not find *.apk!解决办法
  5. 深入研究java.lang.ThreadLocal类
  6. 【SQL】SQL语法树
  7. mysql主从配置对解决并发有用_MySQL主从配置,读写分离
  8. css选择器思维导图
  9. HDU 4968(杭电多校#9 1009题)Improving the GPA (瞎搞)
  10. Archlinux下启用Thinkpad功能键
  11. php 日期函数大全,php日期函数
  12. C语言中,int、char、float、double各占多少字节
  13. 从个人应用到企业级应用——数字钱包市场调研分析报告
  14. springboot+华迪企业合同管理平台 毕业设计-附源码191555
  15. windows验证和SQLSERVER验证有什么区别?--混合认证
  16. python学习教程12-从文本中获取电话号码2
  17. 坐标系基础相关知识:右手定则
  18. ABAP中的loop
  19. 文件上传中国菜刀 —— 【WUST-CTF2020】CV Maker
  20. 2020百度云智峰会举行,CTO王海峰与浦发银行、明阳智慧能源登台央视“对话”成亮点

热门文章

  1. 实际的Reactor操作–检索Cloud Foundry应用程序的详细信息
  2. 将自定义功能添加到Spring数据存储库
  3. Java 8:使用交替接口公开的类型安全地图生成器
  4. Apache Drill:如何创建新功能?
  5. #102030:在30天内运行20 10K来庆祝Java的20年
  6. 提高性能:流的非阻塞处理
  7. 服务器与客户端渲染(AngularJS与服务器端MVC)
  8. 从Java连接到Cassandra
  9. 结合使用嵌入式Tomcat和Maven tomcat插件
  10. Google Guava EventBus用于事件编程