BT

OracleがOpenJDKの'Unsafe'実装をクリーンアップ

| 作者: Monica Beckwith フォローする 604 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2016年3月28日. 推定読書時間: 3 分 |

原文(投稿日:2016/02/29)へのリンク

2017年第2四半期に予定されるJava 9一般公開が近づき,多くのJEP提案も最終段階に入り始めている。中心的な存在となることが確実視されるJEP 261(モジュールシステム)は,JSR 376で定義されたJava Platform Module Systemの導入に関する提案である。このモジュールシステムJEPはJEP 260(内部APIの大半をカプセル化する)に依存しており,結果的にこれまで議論の的であったsun.misc.Unsafeクラスの機能を,JEP 193の定義する変数ハンドルを通じて外部に公開することになる。InfoQでは以前にも,sun.misc.Unsafeの取り扱いに対する(JEP 260提案以前の)コミュニティの懸念と,想定される(JEP 260実装後の)移行計画を詳細にお伝えしている

JDK Bug Systemに先日ポストされたBug 8149159では,パラメータチェックのネイティブ層からJavaへの移行(JITの簡略化が可能になる),sun.misc.Unsafejdk.internal.misc.Unsafeの統合,ネイティブコード全般のクリーンアップなど,最適化とクリーンアップが提案されている。

2月18日,OracleのエンジニアであるMikael Vidstedt氏が,OpenJDK開発者コミュニティのレビューを受けるべく,2つのパッチ(OpenJDK用とOpenJDK HotSpot VM用)を提出した。

氏はパッチの内容を次のようにまとめている。

  • jdk.internal.misc.Unsafeへの移行が完了した,sun.misc.Unsafeのコードの重複回避。これにはVM - 特にunsafe.cpp - で,s.m.Unsafeに注意を払う必要がなくなるという意味もある。
  • s.m.Unsafeデレゲーションメソッドはアノテーションなしでもインライン化される可能性が高いが,パフォーマンス低下のリスクを最小限にする目的で,すべて@ForceInlineを指定した。
  • ドキュメントを更新して,変数の有効性保証がUnsafe使用者の責任であることを明記した。
  • パラメータチェック処理を可能な限りunsafe.cppに移動して,ネイティブコードの簡素化とJITによる最適化を可能にした。
  • 一部のパラメータチェックの緩和。例えば,最近導入されたU.copySwapMemoryでは,nullポインタチェックは行なわない。この対応の根拠については,j.i.m.U.checkPointerのドキュメントを参照のこと。U.copySwapMemoryを除く現在のUnsafeメソッドでは,NULL関連のチェックを行っていないことも注意が必要である。
  • U.copySwapMemoryをベースとしたテストをj.i.m.U.copyMemoryにも追加した。統一すべきであれば,その旨指摘してほしい(本来ならばそうすべき)。

Vidstedt氏は,Unsafeのクリーンアップは“かなり過激”な変更であるとして,次のような点を指摘する。

  • unsafe.cppの他のローカル関数と同じように,Unsafe_関数もstaticとして宣言されるようになった。
  • unsafe.hppが追加されて,VMの他の部分で使用されている関数のいくつかが移動された。また,いくつかの“extern”関数宣言が削除された(externの(過)使用は可読性を損なう)。
  • UNSAFE_LEAFが使用不可であるという的外れなコメントが削除された – 何ということはなく,単にJVM_LEAFを使用すればよい。
  • 簡単なリーフメソッドのいくつかで,UNSAFE_LEAFが使用されている。
  • 自動インデント処理を考慮して,UNSAFE_ENTRY/UNSAFE_ENDを分かりやすくする括弧が追加された。
  • 使用されていなかったUnsafe_<...>##140関数とマクロが削除された。
  • unsafe.cppのマクロ定義全体が一貫性を持つように,マクロ引数の名称が変更された。
  • いくつかのチェックをアサートにした – 前述のように,j.i.m.Unsafeでチェックが行なわれるようになったため。
  • s.m.Unsafe関連のコードがすべて削除された。
 
 

この記事を評価

関連性
形式
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT