Java の System.arraycopy() は小さな配列に対して効率的ですか? 質問する

Java の System.arraycopy() は小さな配列に対して効率的ですか? 質問する

Java はSystem.arraycopy()小さな配列に対して効率的ですか、それともネイティブ メソッドであるという事実により、単純なループと関数呼び出しよりも大幅に効率が悪くなる可能性がありますか?

ネイティブ メソッドでは、何らかの Java システム ブリッジを通過する際に追加のパフォーマンス オーバーヘッドが発生しますか?

ベストアンサー1

Sid が書いた内容をもう少し詳しく説明すると、 はSystem.arraycopy単なる JIT 組み込み関数である可能性が非常に高いです。つまり、コードが を呼び出すとSystem.arraycopy、JNI インターフェイスを介して実行されない JIT 固有の実装 (JIT が「ホット」としてタグ付けした場合) が呼び出される可能性が高くSystem.arraycopy、そのためネイティブ メソッドの通常のオーバーヘッドは発生しません。

一般に、ネイティブ メソッドを実行すると、いくらかのオーバーヘッドが発生します (JNI インターフェイスを経由するため、ネイティブ メソッドの実行中は一部の内部 JVM 操作は実行できません)。ただし、メソッドが「ネイティブ」としてマークされているからといって、実際に JNI を使用して実行しているわけではありません。JIT は、奇妙な動作をすることがあります。

最も簡単な方法は、すでに提案されているように、Java マイクロベンチマークの通常の注意事項 (最初にコードをウォームアップする、JIT は単に no-op として最適化するため副作用のないコードを避ける、など) に注意しながら、小さなベンチマークを作成することです。

おすすめ記事