2017-11-27 5 views
0

は、Java 8までは、次のようなメソッドを介してシングルトンsun.misc.Unsafeインスタンスを得ることができた:Java 9でsun.misc.Unsafeを使用することはできますか?

public static Unsafe getUnsafe() { 
    try { 
     Field f = Unsafe.class.getDeclaredField("theUnsafe"); 
     f.setAccessible(true); 
     return (Unsafe) f.get(null); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

それは非常にUnsafeを使用していないことが示唆されたにもかかわらず、多くのベンダーとライブラリが内部的にそれを使用しています。

Java 9とJigsawでは、Unsafeの処理方法も変更されていると思います。私は、反対の情報でいくつかの記事を読む。一部は完全に隠されており、取り出すことはできないと言う人もいれば、VMフラグを有効にする必要があると言う人もいれば、今では正式にサポートするべきであると書いている人もいます。

So:まだJava 9でsun.misc.Unsafeを使用することはできますか?

+1

「java.misc.Unsafe」のようなものはありません。 'sun.misc.Unsafe'があります。これは、1997年以来私が今までに見たJDKのすべてのリリースに含まれていた一般的な' sun。* 'パッケージ警告の対象です。 – EJP

+4

sun.misc.Unsafeは同じように動作しますJDK 8と同様にJDK 9。すべての詳細についてはJEP 260を参照してください。あなたはどんな問題に取り組んでいますか? –

+1

正しい終了の質問は、 "もしそうなら、*なぜ*?"でなければなりません。 – Holger

答えて

3

これを取得しただけでなく、さらにはのメソッドを追加しました。これは、将来、ある時に削除されるという約束です。今度は確かに。

また、の2つのが存在します.1つはsun.misc.Unsafejdk.internal.misc.Unsafeです。最初のものは削除するものです。

2番目のものはjava-9でも取得できますが、特別なキーaddExports:java.base/jdk.internal.misc=ALL-UNAMED(ただしこれはお勧めできません)でのみ取得できます。

変更されたのは、多くのパブリックメソッドがパッチされているか、追加されていないためです。たとえば、AtomicInteger#weakCompareAndSetのように、それを使用する必要はありません。

関連する問題