Help us understand the problem. What is going on with this article?

Item 66: Use native methods judiciously

More than 1 year has passed since last update.

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メソッドを使えということ。

nannany
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away