仍然不安全:变成了Java 9功能的Java 6中的主要错误
sun.misc.Unsafe的未來(lái)將如何發(fā)展?
隨著2015年即將結(jié)束,我們認(rèn)為這將是對(duì)Java社區(qū)過(guò)去一年中最熱門(mén)辯論之一進(jìn)行尸檢的好機(jī)會(huì)。 通過(guò)查看標(biāo)題,您中的大多數(shù)人可能已經(jīng)開(kāi)始在口腔中產(chǎn)生酸味并在腸道中產(chǎn)生憤怒的感覺(jué),但是如果您錯(cuò)過(guò)了該操作,讓我們來(lái)回顧一下所有引起大驚小怪的事情。
最重要的是:sun.misc.Unsafe不會(huì)走到任何地方
整個(gè)辯論始于7月,當(dāng)時(shí)Oracle正在考慮刪除許多開(kāi)發(fā)人員所依賴的作為JVM關(guān)鍵API之一的Unsafe庫(kù)。 該提案建議,在Java 9發(fā)行時(shí),Unsafe將被完全封裝,盡管該Java版本的發(fā)行日程仍遙遙無(wú)期,但僅此宣布就在開(kāi)發(fā)人員社區(qū)引起了軒然大波。
我們看到Reddit,Twitter和多個(gè)博客對(duì)此舉表示了批評(píng),許多開(kāi)發(fā)人員感到甲骨文“背叛了”,原因有以下三個(gè)主要原因:
暫時(shí)存在一個(gè)折衷方案,這是Java平臺(tái)組首席架構(gòu)師Mark Reinhold建議的三步解決方案 。 該解決方案概述了封裝內(nèi)部API(例如Unsafe)的所需過(guò)程:
所以現(xiàn)在的問(wèn)題是:Oracle為什么要尋求消除不安全并從頭開(kāi)始這場(chǎng)風(fēng)暴? 要了解,我們可能應(yīng)該在做出任何判斷之前以一種或另一種方式客觀地看待事物。
如何變得不安全
我們唯一可以啟動(dòng)檢查此類火災(zāi)原因的過(guò)程的地方就是Unsafe庫(kù)本身。 許多開(kāi)發(fā)人員已經(jīng)開(kāi)始依靠其獨(dú)特的功能來(lái)完成各種任務(wù),但是,請(qǐng)不要忘記,Unsafe庫(kù)實(shí)際上并不意味著內(nèi)部開(kāi)發(fā)團(tuán)隊(duì)之外的任何人都可以訪問(wèn)。 它曾經(jīng)是而且仍然是一種不規(guī)則,巧合,各種錯(cuò)誤。
當(dāng)然,這是一次非常有用和快樂(lè)的巧合,但它根本就不會(huì)發(fā)生。 多年以來(lái),各種不安全的用途已成為實(shí)際上的標(biāo)準(zhǔn),但是這些用途中的任何一種的起源仍源于錯(cuò)誤。 因此,期望Oracle無(wú)限期地保留過(guò)時(shí)的Sun *庫(kù)有點(diǎn)不合邏輯。畢竟,如果我們中有人發(fā)現(xiàn)了自己代碼中的錯(cuò)誤,我們是否會(huì)努力消除它?
社區(qū)的反應(yīng)–一場(chǎng)災(zāi)難
隨著Unsafe風(fēng)暴席卷整個(gè)Java開(kāi)發(fā)人員社區(qū),有兩個(gè)主要問(wèn)題不斷出現(xiàn)。 第一個(gè)是先前討論的背叛感(是否合理,取決于您的觀點(diǎn))。 第二個(gè),也許稍微更合理-出于合理的擔(dān)心,封裝Unsafe將有史以來(lái)第一次違反Java的一項(xiàng)主要承諾-向后兼容性。
一些開(kāi)發(fā)人員一直在發(fā)布有關(guān)消除或限制訪問(wèn)Unsafe的可能結(jié)果的世界末日帖子,稱許多工具,庫(kù)和基礎(chǔ)結(jié)構(gòu)軟件直接或在可見(jiàn)代碼下方使用該庫(kù),其中包括Hazelcast,Cassandra,Spring等。其他。
如果要完全實(shí)現(xiàn)Oracle的封裝計(jì)劃,那么使用一個(gè)或多個(gè)這些工具的任何開(kāi)發(fā)人員都會(huì)遇到嚴(yán)重的困難。
甲骨文的立場(chǎng)–
該庫(kù)的名稱應(yīng)表明該庫(kù)存在使用風(fēng)險(xiǎn),并且Oracle所做的一切實(shí)際上都是在試圖最大程度地降低任何潛在風(fēng)險(xiǎn)。 在任何地方使用標(biāo)題為“不安全”的庫(kù)有點(diǎn)像看到雷區(qū),成功穿越它,然后邀請(qǐng)所有朋友也穿越它,因?yàn)樗盀槟ぷ鳌薄?那只會(huì)導(dǎo)致一個(gè)結(jié)果:
多年來(lái),Oracle一直在解釋說(shuō),盡管他們贊賞所有社區(qū)使用Unsafe庫(kù)在開(kāi)發(fā)方面所做的努力,但是訪問(wèn)這樣低級(jí)的庫(kù)應(yīng)該被視為有使用風(fēng)險(xiǎn)。 不負(fù)責(zé)任地使用未記錄的庫(kù)可能會(huì)在使用該庫(kù)的任何平臺(tái)上導(dǎo)致各種內(nèi)存問(wèn)題和其他處理過(guò)載。 就Oracle而言,這就是“不太理想的結(jié)果”的確切定義。 可能需要注意的是,并不是所有Java中的“棄用”在發(fā)生時(shí)都被認(rèn)為是不好的,有些人,例如刪除PermGen最終被稱贊為“ 非常積極” 。
最后的想法
看起來(lái),盡管Java平臺(tái)團(tuán)隊(duì)看到了抗議的蔓延(他們很可能知道抗議即將來(lái)臨)并最終找到了解決該問(wèn)題的合理解決方案,或者至少可以與開(kāi)發(fā)人員社區(qū)一起生活。
距離Java 9的實(shí)際發(fā)布版本還有1年多的時(shí)間,無(wú)論是否以任何形式或形式存在Unsafe庫(kù),而且其他更改和聲明可能很快就會(huì)到來(lái)。 您可以訪問(wèn)我們的倒計(jì)時(shí)站點(diǎn)java9countdown.xyz并注冊(cè)新聞通訊,以獲取有關(guān)Java 9所有相關(guān)問(wèn)題的最新信息。
翻譯自: https://www.javacodegeeks.com/2016/01/still-unsafe-major-bug-java-6-turned-java-9-feature.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的仍然不安全:变成了Java 9功能的Java 6中的主要错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 湖北本科大学排名一览表(湖北高校排名更新
- 下一篇: java 7.函数-递归_带有谓词的Ja