0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Item 66: Use native methods judiciously

Posted at

66.nativeメソッドは気を付けて使うべし

native メソッド

Java Native Interface(JNI)を使って、CやC++で書かれたメソッドを呼べる。

歴史的に、nativeメソッドには3つの用途がある。

  • windowsのレジストリなど、プラットフォーム特有の機能へアクセスするため
  • レガシーなデータにアクセスするライブラリを含む、nativeコードのライブラリを使うため
  • パフォーマンス向上のため

プラットフォーム特有の機能にアクセスするためにnativeメソッドを使うことは正当である。
とはいえ、Javaは成熟してきたので、だいたいの機能はある。例えば、Java9ではOSのプロセスにアクセスできたりする。
また、Javaにはないライブラリがnativeライブラリにある場合も、nativeメソッドを使ってよい。

性能のためにnativeメソッドを使うことはあまりない。
初期のJavaではそのようなことがあったらしいが、JVMの進化によりそんなに性能は変わらなくなっている。

nativeメソッドの欠点

nativeメソッドには大きな欠点がある。

  • nativeメソッドはsafe(BOFとかが起きないという意味の、メモリ管理的な安全のことだと思う)でないので(Item50)、nativeメソッドを使っているアプリケーションは、Javaとは言え、メモリ破損のエラーに対して免疫があるとは言えなくなる。
  • nativeメソッドはプラットフォームに大きく依存するので、移植性がなくなる。
  • デバッグがむずい
  • 下手すると性能劣化する。ガベージコレクターがうまく働かないことがあり得るし、nativeコードを行き来するコストがかさむためだ。
  • 可読性が低く、冗長な記述が必要なグルーコードが必用。

つまり、よく考えてnativeメソッドを使えということ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?