unsafehelper java_Java 9中将移除 Sun.misc.Unsafe
災(zāi)難將至,Java 9中將移除 Sun.misc.Unsafe
Oracle 正在計(jì)劃在Java 9中去掉 sun.misc.Unsafe API。 這絕對(duì)將是一場(chǎng)災(zāi)難,有可能會(huì)徹底破壞整個(gè) java 生態(tài)圈。 幾乎每個(gè)使用 java開(kāi)發(fā)的工具、軟件基礎(chǔ)設(shè)施、高性能開(kāi)發(fā)庫(kù)都在底層使用了 sun.misc.Unsafe。 下面是上面鏈接中文檔提到一個(gè)小列表:
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
… 這個(gè)列表很長(zhǎng)。。。
然而, Oracle 看起來(lái)是鐵了心毫無(wú)理由的去掉它。下面是一個(gè)來(lái)自他們郵件列表的評(píng)論: n
恕我直言 — sun.misc.Unsafe 必須死掉。 它是“不安全”的。它必須被廢棄。請(qǐng)忽略一切理論上(想象中的)羈絆,從此走上正確的道路吧。
這個(gè)工程師似乎是毫無(wú)根據(jù)的憎恨 Unsafe。。。
Oracle應(yīng)該怎么做?
當(dāng)前Unsafe 類是一個(gè)強(qiáng)有力的工具。 沒(méi)有必要去掉它。對(duì)這個(gè)類的特性有些明確的需求,這就是為什么事實(shí)上幾乎每個(gè) Java 程序都在使用它,不知不覺(jué)中許多流行的 Java庫(kù)也在使用它。
提供完整的文檔、發(fā)布 Unsafe 類
Oracle 應(yīng)該接受現(xiàn)實(shí),并將Unsafe轉(zhuǎn)為公開(kāi) API,提供完善的文檔和開(kāi)發(fā)示例。 當(dāng)前,沒(méi)有準(zhǔn)確的文檔,開(kāi)發(fā)中需要通過(guò) stackoverflow 帖子或者其他一些隨機(jī)的博客學(xué)習(xí)怎么使用 Unsafe。 移除 Unsafe 的一個(gè)主要論據(jù)是:使用它太容易讓開(kāi)發(fā)中犯錯(cuò)了。如果有完善的官方文檔或許可以改善這一現(xiàn)狀。
隨 Unsafe一起發(fā)布新的替代 API
除了 Unsafe 文檔外,Oracle 應(yīng)該發(fā)布一個(gè)更易用的 API,提供 Unsafe 相同的功能。 這是上面文檔中的提議的一部分。然而這不太應(yīng)該以移除 Unsafe 為代價(jià)。 人們?cè)陂_(kāi)發(fā)新軟件的時(shí)候就會(huì)逐步過(guò)渡到新的 API,Unsafe 就自動(dòng)被廢棄了。
這類似于向 Java 8引入 java.time 包中的新的 DateTime API。 新的日期 API 的引入并不表示之前的DateTime API 被徹底移除或者隱藏到某個(gè)特殊 JVM flag 里。那樣也肯定會(huì)引發(fā)一些事故。
實(shí)際上最可能會(huì)變成什么樣子?
根據(jù)事情的發(fā)展趨勢(shì),Oracle 看起來(lái)會(huì):
在 Java 9正常模式下移除 Unsafe 類。
僅在必須的情況下通過(guò)向 JVM 傳遞一個(gè)特殊的 flag 啟動(dòng) Unsafe
這將導(dǎo)致絕對(duì)的災(zāi)難!
不僅類似 Cassandra 或Zookeeper 等基礎(chǔ)軟件,幾乎所有的 Java 程序,包括 web 應(yīng)用也會(huì)掛掉,因?yàn)樗麄兪褂玫幕A(chǔ)庫(kù)可能在底層使用了 Unsafe。
從此打開(kāi) Unsafe flag 將會(huì)成為啟動(dòng) JVM 的默認(rèn) flag 之一,因?yàn)槿绻淮蜷_(kāi)它的話 Java 應(yīng)用會(huì)在毫無(wú)提示的情況下崩潰。
因?yàn)榇蠖鄶?shù)環(huán)境不會(huì)默認(rèn)把這個(gè)JVM flag 打開(kāi),當(dāng)他們的系統(tǒng)升級(jí) Java時(shí)軟件系統(tǒng)會(huì)掛掉。 Java 打破了向后兼容的承諾。所有的基礎(chǔ)庫(kù)、軟件基礎(chǔ)設(shè)施從此變?yōu)閮蓚€(gè)版本:
Java 9之前的版本 – 使用 Unsafe
Java 9兼容 – 不使用 Unsafe。
遷移至 Java 9的進(jìn)程會(huì)因此而變緩慢,這將影響整個(gè) Java 生態(tài)系統(tǒng)。這將會(huì)類似于 Python 2升級(jí)到 Python 3的過(guò)程。
這種錯(cuò)誤 JVM 社區(qū)之前曾經(jīng)犯過(guò)
你是不是任務(wù)這太荒唐了,Oracle 絕不可能犯這樣的錯(cuò)誤?事實(shí)上它曾做過(guò)類似的事情了, 例如Java 7中的字節(jié)碼校驗(yàn)器。
結(jié)論
現(xiàn)在是該讓大家開(kāi)始意識(shí)到這個(gè)問(wèn)題的時(shí)候了。從 JVM中去掉Unsafe或者把它隱藏在某個(gè)特殊的 flag 里面勢(shì)必導(dǎo)致一場(chǎng)災(zāi)難。
參考鏈接
總結(jié)
以上是生活随笔為你收集整理的unsafehelper java_Java 9中将移除 Sun.misc.Unsafe的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 哪些机型推荐升级iOS 16.2正式版
- 下一篇: java课程设计进程管理_Java课设总