2012-02-21 6 views
2

私は本当に重いビットのデコードと操作を行うJavaクラスを持っています。このクラスは、アプリ全体の実行時間のほぼ96%を占めます。私は、これらのビット操作のためのいくつかのCコードを記述し、Javaのネイティブメソッドを使用してCライブラリをロードすると、私のパフォーマンスが大幅に向上するのだろうか?JNIはビット操作のパフォーマンスを向上させるソリューションですか?

+1

おそらく。それはまさにほとんどのJVMが非常にうまく処理できるコードの種類です。オブジェクト、配列、または三角関係があった場合、それは完全に別のものになります。 – harold

答えて

1

JNI /ネイティブコードが高速になるのを見る唯一の方法は、大きなデータセットをネイティブメソッドに渡してビット操作することでJNI呼び出しオーバーヘッドを克服することです。 Javaメソッドとは異なり、JNIメソッドはホットスポットによってインライン化/最適化することはできません。ネイティブ呼び出しでは、Javaメモリ領域とネイティブメモリ領域の間で前後に値をコピーする必要があります。

3

見つけるための唯一の現実的な方法は、専用のJavaベンチマークツールを使用して慎重にベンチマークを行うことです - Caliperが頭に浮かぶ - しかし、私は個人的にあなたがJNIのオーバーヘッドを上回るために十分な性能を獲得したいことを疑います。

2

ルイスが述べたように、知る最も良い方法は測定することです。 JNIを呼び出すオーバーヘッドは重要です。あなたのメソッドを頻繁に呼び出すのが良い質問です。言い換えれば、実行時間の96%を消費するために、ビット操作方法は1秒間に何千回も呼び出されるのですか、それとも1回の呼び出しで重要な作業ですか?後者の場合は、ネイティブコードの恩恵を受ける可能性が非常に高いです。

関連する問題