仍然不安全:变成了Java 9功能的Java 6中的主要错误

sun.misc.Unsafe的未来将如何发展?

随着2015年即将结束,我们认为这将是对Java社区过去一年中最热门辩论之一进行尸检的好机会。 通过查看标题,您中的大多数人可能已经开始在口腔中产生酸味并在肠道中产生愤怒的感觉,但是如果您错过了该操作,让我们来回顾一下所有引起大惊小怪的事情。

最重要的是:sun.misc.Unsafe不会走到任何地方

整个辩论始于7月,当时Oracle正在考虑删除许多开发人员所依赖的作为JVM关键API之一的Unsafe库。 该提案建议,在Java 9发行时,Unsafe将被完全封装,尽管该Java版本的发行日程仍遥遥无期,但仅此宣布就在开发人员社区引起了轩然大波。

我们看到Reddit,Twitter和多个博客对此举表示了批评,许多开发人员感到甲骨文“背叛了”,原因有以下三个主要原因:

  1. Unsafe提供了对有助于开发许多工具的低级功能的访问。
  2. 这些相同的功能在内部JVM库之外没有任何其他选择。
  3. 许多开发人员担心sun.misc.Unsafe的封装会产生负面影响,甚至将许多工具减少到无法使用的状态。

暂时存在一个折衷方案,这是Java平台组首席架构师Mark Reinhold建议的三步解决方案 。 该解决方案概述了封装内部API(例如Unsafe)的所需过程:

  1. 如果它在JDK 8中具有受支持的替代品,那么它将被封装在JDK 9中
  2. 如果它在JDK 8中没有受支持的替代品,则它将不会封装在JDK 9中,因此外部代码仍然可以访问它; 并进一步,
  3. 如果它在JDK 9中具有受支持的替代产品,那么它将不推荐使用,并将其封装在JDK 9中,甚至可能在JDK 10中将其删除。

所以现在的问题是:Oracle为什么要寻求消除不安全并从头开始这场风暴? 要了解,我们可能应该在做出任何判断之前以一种或另一种方式客观地看待事物。

如何变得不安全

我们唯一可以启动检查此类火灾原因的过程的地方就是Unsafe库本身。 许多开发人员已经开始依靠其独特的功能来完成各种任务,但是,请不要忘记,Unsafe库实际上并不意味着内部开发团队之外的任何人都可以访问。 它曾经是而且仍然是一种不规则,巧合,各种错误。

当然,这是一次非常有用和快乐的巧合,但它根本就不会发生。 多年以来,各种不安全的用途已成为实际上的标准,但是这些用途中的任何一种的起源仍源于错误。 因此,期望Oracle无限期地保留过时的Sun *库有点不合逻辑。毕竟,如果我们中有人发现了自己代码中的错误,我们是否会努力消除它?

社区的反应–一场灾难

随着Unsafe风暴席卷整个Java开发人员社区,有两个主要问题不断出现。 第一个是先前讨论的背叛感(是否合理,取决于您的观点)。 第二个,也许稍微更合理-出于合理的担心,封装Unsafe将有史以来第一次违反Java的一项主要承诺-向后兼容性。

一些开发人员一直在发布有关消除或限制访问Unsafe的可能结果的世界末日帖子,称许多工具,库和基础结构软件直接或在可见代码下方使用该库,其中包括Hazelcast,Cassandra,Spring等。其他。

如果要完全实现Oracle的封装计划,那么使用一个或多个这些工具的任何开发人员都会遇到严重的困难。

甲骨文的立场–

该库的名称应表明该库存在使用风险,并且Oracle所做的一切实际上都是在试图最大程度地降低任何潜在风险。 在任何地方使用标题为“不安全”的库有点像看到雷区,成功穿越它,然后邀请所有朋友也穿越它,因为它“为您工作”。 那只会导致一个结果:

繁荣

多年来,Oracle一直在解释说,尽管他们赞赏所有社区使用Unsafe库在开发方面所做的努力,但是访问这样低级的库应该被视为有使用风险。 不负责任地使用未记录的库可能会在使用该库的任何平台上导致各种内存问题和其他处理过载。 就Oracle而言,这就是“不太理想的结果”的确切定义。 可能需要注意的是,并不是所有Java中的“弃用”在发生时都被认为是不好的,有些人,例如删除PermGen最终被称赞为“ 非常积极” 。

最后的想法

看起来,尽管Java平台团队看到了抗议的蔓延(他们很可能知道抗议即将来临)并最终找到了解决该问题的合理解决方案,或者至少可以与开发人员社区一起生活。

距离Java 9的实际发布版本还有1年多的时间,无论是否以任何形式或形式存在Unsafe库,而且其他更改和声明可能很快就会到来。 您可以访问我们的倒计时站点java9countdown.xyz并注册新闻通讯,以获取有关Java 9所有相关问题的最新信息。

翻译自: https://www.javacodegeeks.com/2016/01/still-unsafe-major-bug-java-6-turned-java-9-feature.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

camvid数据集使用方法_使用PyTorch处理CIFAR10数据集并显示

在训练图像分类的时候,我们通常会使用CIFAR10数据集,今天就先写一下如何展示数据集的图片及预处理。第一部分代码,展示原始图像:import numpy as npimport torch#导入内置cifarfrom torchvision.datasets import cifar#预处理模块…

类型之间的相互转换php,php学习之数据类型之间的转换介绍

复制代码 代码如下:/*数据类型之间相互转换* 一种是强制转换* setType(变量,类型); //int,integer,float,double等等。* 这个函数将原变量的类型改变,用var_dump();可以查看变量** 在赋值前使用(类型)的形式,不会改变原变量的类型* $a(int)"123abc";** $变…

rhel 8.2不识别unicode_基于tensorflow 实现端到端的OCR:二代身份证号识别

最近在研究OCR识别相关的东西,最终目标是能识别身份证上的所有中文汉字数字,不过本文先设定一个小目标,先识别定长为18的身份证号,当然本文的思路也是可以复用来识别定长的验证码识别的。本文实现思路主要来源于Xlvector的博客&am…

Lua和C++交互详细总结

转载自:http://www.cnblogs.com/sevenyuan/p/4511808.html 一、Lua堆栈 要理解Lua和C交互,首先要理解Lua堆栈。 简单来说,Lua和C/C语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。 在Lua中,Lua堆栈就是一个struc…

php imagemagick 漏洞,ImageMagick漏洞(CVE-2016-3714)修复方案

关于这个漏洞影响ImageMagick6.9.3-9以前是所有版本,包括ubuntu源中安装的ImageMagick。而官方在6.9.3-9版本中对漏洞进行了不完全的修复。所以,我们不能仅通过更新ImageMagick的版本来杜绝这个漏洞。现在,我们可以通过如下两个方法来暂时规避…

adf开发_ADF BC:创建绑定到业务组件的UI表

adf开发在此示例中,我们将展示如何创建绑定到业务组件的简单UI表(af:table)。 我再次尝试使用简单的标准在网上进行搜索: “如何创建绑定到业务组件ADF 11g的af:table” 我必须承认我没有得到我想要的答案…

java游戏热血江湖,热血江湖源码_附安装教程

释放双眼,带上耳机,听听看~!源码里面可能有联系方式之类的不要相信,反正我在这里已经说过了,你们上当就不管我的事了还有,源码里面的联系方式跟我没关系!教程来了认真看!!&#xff0…

cf 412A

http://codeforces.com/contest/806/problem/A 大意:已知分数x/y,给定p/q,问是否存在a,b使(pa)/(qab)x/y; 一开始用exgcd,算最优不好写,而且数据longlong范围直接炸了;看了一眼题解,居然能二分,…

在没有适当上下文的情况下引发异常是一种不良习惯

Allison Anders等人的《四个房间》(1995)。 我不断重复同样的错误。 因此,该停止并制定规则以防止这种情况了。 错误不是致命的,但很烦人。 当查看生产日志时,经常会看到类似"File doesnt exist" &#xff…

内存压力测试软件_日常游戏,毫无压力,荣耀Magicbook 14锐龙版性能测试

上期蚂蚁给大家带来了荣耀Magicbook 14锐龙版的初见评测,本期将会带来性能的测试,究竟这台高性价比的电脑,能不能应付得了日常的游戏使用呢?蚂蚁这次使用的测试软件分别为:鲁大师、CPU-Z、Cinebench R15、CrystalDiskM…

c 解析java byte,深入解析Java编程中面向字节流的一些应用

文件输入输出流文件输入输出流 FileInputStream 和 FileOutputStream 负责完成对本地磁盘文件的顺序输入输出操作。【例】通过程序创建一个文件,从键盘输入字符,当遇到字符“#”时结束,在屏幕上显示该文件的所有内容import java.io.*;class e…

并发设计模式之生产者消费者设计模式

主函数: 1 package com.ietree.basicskill.mutilthread.designpattern.ProducerConsumer;2 3 import java.util.concurrent.BlockingQueue;4 import java.util.concurrent.ExecutorService;5 import java.util.concurrent.Executors;6 import java.util.concurrent.…

cdatabase读取excel第一行数据_pandas读取excel数据并对重复数据进行标记或者删除

pandas读取excel数据并对重复数据进行标记或者删除​mp.weixin.qq.compandas通常在读取excel数据之后,如果需要进行去重,有两种方式,一种是进行标记,另一种是在pandas中直接去重如下图所示,excel数据:&…

二维温度场matlab编程,二维温度场重建算法(价钱可议)

即病态方程的求解,具体问题如下:(1)物理模型矩形区域的物理模型,即辐射传热定律:可转化为:EUT其中:E表示n个壁面单元辐射接收装置各自所接收的辐射能组成的集合。U被称为敏感矩阵,其与第i个气体…

java 7.函数-递归_带有谓词的Java中的函数样式-第2部分

java 7.函数-递归在本文的第一部分中,我们介绍了谓词,这些谓词通过具有返回true或false的单一方法的简单接口,为Java等面向对象的语言带来了函数式编程的某些好处。 在第二部分和最后一部分中,我们将介绍一些更高级的概念&#xf…

apk改之理_一份礼物.apk-O泡果奶的逆向分析

事情起因是震惊全国大学生的1013事件!!!刚好看到社团群里在讨论这个,于是就发挥专业特长分析一下拿到apk ,第一步肯定先放到虚拟机里跑一下看下效果emmm这似曾相识的页面,这熟悉的音量,唯一变化的就是音乐变成了O泡果奶的魔性洗脑…

《java从入门到精通》pdf

下载地址: 网盘下载 内容简介 编辑本书从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进行程序开发应该掌握的各方面技术。全书共分28章,包括:初识Java,熟悉Eclipse开发工具…

接口测试php代码,简易 PHP API 测试

简易 PHP API 测试PHP代码/*Author : JamesDate : 2020/3/21Versions: Beta v2HEPL :HTTP POST :1.{ "select": "mock_data", "where": [{ "id": "1" },{ "username": "james" }], "limit": …

哪个线程执行CompletableFuture的任务和回调?

尽管CompletableFuture大约是两年前(!)于2014年3月在Java 8中引入的,但它仍然是一个相对较新的概念。但是,此类不是很广为人知是一件好事,因为它很容易被滥用,尤其是在线程和线程方面。一路涉及…

时区处理总结

我司业务分布在跨时区的多个国家,我在日常积累了较多的时区处理经验,在此分享一下 首先基本概念,时间分为2种 datetime,这是给人读的时间,分时区。如2000-1-1 12:00:00 gmttimestamp,这是unix时间戳&#x…