sun.misc.Unsafeを理解する

先週のニュースは、一部の開発者が武装しているというニュースで、オラクルが提案したJava9での削除がsun.misc.UnsafeJavaエコシステムを破壊すると主張しました。ただし、低レベルプログラミングに巻き込まれていない多くの開発者にとって、プライベートAPIは謎に包まれている可能性があります。このAPIは、その名前自体が安全でないほど危険なものは何ですか?

ブロガーでオープンソースの寄稿者であるRafaelWinterhalterは、「Understanding sun.misc.Unsafe」で、開発者が特定の目的のためにプラットフォーム機能を変更する低レベルのプログラミングには、安全でないコードが必要になることが多いと説明しています。JNI(Java Native Interface)は、低レベルのJavaプログラミングにとって最も安全なオプションと見なされていますが、多くのオープンソースプロジェクトではUnsafe、制約の少ない回避策として使用されています。

WinterhalterはUnsafe、Javaプログラミングのハードルを克服するために利用するいくつかの例の1つを示しています。

このUnsafeクラスを初めて使用したの は、クラスのコンストラクターを呼び出さずにクラスのインスタンスを作成するためでした。かなりノイズの多いコンストラクターしかないクラス全体をプロキシする必要がありましたが、すべてのメソッド呼び出しを実際のインスタンスに委任したかっただけです[...]サブクラスの作成は簡単で、クラスがインターフェイスで表されている場合は、プロキシは簡単な作業でした。しかし、高価なコンストラクターで行き詰まりました。Unsafeしかし、クラスを使用することで 、私はそれを回避することができました。

UnsafeJavaプログラムで使用する理由と方法を示す追加の例については、「sun.misc.Unsafeについて」および「Javaマジック、パート4:sun.misc.Unsafe」を参照してください。

このストーリー「Understandingsun.misc.Unsafe」は、もともとJavaWorldによって公開されました。