Javaプログラムの効率(特に:アセンブリコード)を測定する方法は?

ジョープ

私は、効率の方向でしばしば私に直面する答えの質問をしました。この種の質問を続けるのではなく、事前に効率を調べたいと思います。ただし、もちろん、さまざまな種類の効率があります。コードの行数、アセンブリ、書き込みにかかる時間、コンピューターの実行にかかる時間。そして、私はおそらくそれを見るもっと多くの方法を見逃しています。

効率を調べる方法はたくさんあるので、どのようにして独自のコードのアセンブリコードを取得し、コード内の適切な場所で停止するから始めたいと思います。(500行のコードがあり、450行目から460行目に関心があるとします)。これがすでにIDEにある機能であるかどうかはわかりませんが、そうであれば、どうすればこのような機能を見つけることができますか?(=この機能がある場合、自分のIDEで見つけることができるように、これらの種類のものの名前は何ですか)。

(Stack Overflowの効率に関する情報はすでにたくさんあります。それらの多くを調べましたが、コードを分析するときに、人々が何から始めるのかを理解するのは難しいと感じました。彼らはコードの研究から始めますか?次に、組み立てますか、それともIDEを使用して最も高価なメソッドを見つけ、このように変更しますか?もちろん、さまざまな要因に大きく依存するため、これは悪い質問ですが、少なくとももう少し感じてもらいたいと思います。それのために、私はこの質問への答えが役立つかもしれないと思います。)

Piotr Praszmo

JVMによって生成されたアセンブリコードを分析しても、有用なものが得られる可能性はほとんどありません。パフォーマンスが心配な場合、これは間違ったアプローチです。低レベルの詳細を測定することによって、高レベルのパフォーマンスについて推論することはできません。これはおそらく、手動でサイクルを数えることができる最初のプログラムでうまく機能しました。今日、コンピューターははるかに複雑になっています。特にJavaなどの高級言語を使用している場合はなおさらです。考慮する必要があるものは次のとおりです。

  • ガベージコレクターが一時停止します
  • さまざまな最適化を備えたJIT
  • 複数レベルの命令およびデータキャッシュ。
  • 分岐予測。

これらのメカニズムとそれらの間の相互作用は、簡単に予測できるものではありません。私が知っている高速プログラムを書くための正しい方法は1つだけです。

  1. プログラムの一部を書いてください。
  2. 確かに遅すぎることを確認します。
  3. ボトルネックを特定して修正します。
  4. 後藤#1。

ボトルネックを特定するために、私は通常JVisualVMから始めて、必要に応じてさらにいくつかの低レベルのツールを使用します。

99%の場合、問題はアルゴリズムの遅延、データ構造の誤り、ディスクアクセスの非効率性、またはデバッグログの残りのような愚かなことです。不必要なコピーやメモリの割り当てを回避するなどのマイクロ最適化が役立つことはあまりありません。まれに、他のすべてが失敗し、タイトなループから数サイクルを絞り出す必要がある場合は、生成されたアセンブリを確認する価値があるかもしれません。PrintAssemblyその場合に役立つかもしれません。あなたはあなたを助ける可能性が最も高いツールから始めたいと思っています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

アセンブラプログラムをシェルコードに正しく変換する方法は?

分類Dev

このARMアセンブリコードプログラムの実行後にN、C、Z、Vフラグを見つける方法は?

分類Dev

ジュリアプログラムの時間を測定する方法は?

分類Dev

プラグインアセンブリをプログラムでMSCRMOnlineにアップロードする

分類Dev

GDBは実行中のプログラムのアセンブリコードを変更できますか?

分類Dev

Javaコードを使用してセレンにChromeブラウザのプロキシを設定する方法

分類Dev

Facebookのコードレスイベントをプログラムで無効にする方法は?

分類Dev

プログラムで、またはコマンドラインからSubversionのプロキシ設定にアクセスする方法はありますか?

分類Dev

コマンドラインから「スタートアップアプリケーション」でプログラムを無効にする方法

分類Dev

プログラムをアセンブリで作成する場合、このHelloWorldアセンブリコードのどの部分が不可欠ですか?

分類Dev

Androidでプログラムでロケーションアクセスを有効にする方法は?

分類Dev

ユーザーから入力を取得し、Pythonのサブプロセス呼び出しによってトリガーされるインタラクティブなコマンドラインプログラムに渡す方法は?

分類Dev

プログラムクラス(コンソールアプリ)の変数にアクセスする方法

分類Dev

ASP .Net Core2でAzureBlobへのアップロードのビデオエンコーディングを決定するための効率的な方法

分類Dev

レコードのプライベートプロシージャ/関数に効率的にアクセスする方法はありますか?

分類Dev

プログラムでJavaキーワードアサートをEclipseで有効にする方法は?

分類Dev

電話のヘッドセット アイコンをプログラムでリセットする方法

分類Dev

Cで書かれたプログラムにアセンブリコードが含まれているのは一般的ですか?

分類Dev

プログラムで自動開始とフローティングウィンドウのアクセス許可を有効にする方法

分類Dev

アメリカの距離測定とメートル法をJavaで変換するプログラム

分類Dev

タームラインモードでのみタブコンプリートを有効にする方法

分類Dev

ロールプレイングアイテムのプロパティをJavaに効率的に保存するにはどうすればよいですか?

分類Dev

プログラムのアセンブリ言語を終了する方法

分類Dev

プログラムのアセンブリ言語を終了する方法

分類Dev

Mavenアセンブリプラグインのカスタムプロパティを設定するにはどうすればよいですか?

分類Dev

タブバーコントローラーからビューコントローラーをプログラムでアンロードする方法は?

分類Dev

ベンダーとアプリのコードを効率的に分割するWebpackワークフロー

分類Dev

アセンブリのプログラムを理解する

分類Dev

ブースト グラフ ライブラリで指定された頂点の隣接をランダムに選択する効率的な方法は?

Related 関連記事

  1. 1

    アセンブラプログラムをシェルコードに正しく変換する方法は?

  2. 2

    このARMアセンブリコードプログラムの実行後にN、C、Z、Vフラグを見つける方法は?

  3. 3

    ジュリアプログラムの時間を測定する方法は?

  4. 4

    プラグインアセンブリをプログラムでMSCRMOnlineにアップロードする

  5. 5

    GDBは実行中のプログラムのアセンブリコードを変更できますか?

  6. 6

    Javaコードを使用してセレンにChromeブラウザのプロキシを設定する方法

  7. 7

    Facebookのコードレスイベントをプログラムで無効にする方法は?

  8. 8

    プログラムで、またはコマンドラインからSubversionのプロキシ設定にアクセスする方法はありますか?

  9. 9

    コマンドラインから「スタートアップアプリケーション」でプログラムを無効にする方法

  10. 10

    プログラムをアセンブリで作成する場合、このHelloWorldアセンブリコードのどの部分が不可欠ですか?

  11. 11

    Androidでプログラムでロケーションアクセスを有効にする方法は?

  12. 12

    ユーザーから入力を取得し、Pythonのサブプロセス呼び出しによってトリガーされるインタラクティブなコマンドラインプログラムに渡す方法は?

  13. 13

    プログラムクラス(コンソールアプリ)の変数にアクセスする方法

  14. 14

    ASP .Net Core2でAzureBlobへのアップロードのビデオエンコーディングを決定するための効率的な方法

  15. 15

    レコードのプライベートプロシージャ/関数に効率的にアクセスする方法はありますか?

  16. 16

    プログラムでJavaキーワードアサートをEclipseで有効にする方法は?

  17. 17

    電話のヘッドセット アイコンをプログラムでリセットする方法

  18. 18

    Cで書かれたプログラムにアセンブリコードが含まれているのは一般的ですか?

  19. 19

    プログラムで自動開始とフローティングウィンドウのアクセス許可を有効にする方法

  20. 20

    アメリカの距離測定とメートル法をJavaで変換するプログラム

  21. 21

    タームラインモードでのみタブコンプリートを有効にする方法

  22. 22

    ロールプレイングアイテムのプロパティをJavaに効率的に保存するにはどうすればよいですか?

  23. 23

    プログラムのアセンブリ言語を終了する方法

  24. 24

    プログラムのアセンブリ言語を終了する方法

  25. 25

    Mavenアセンブリプラグインのカスタムプロパティを設定するにはどうすればよいですか?

  26. 26

    タブバーコントローラーからビューコントローラーをプログラムでアンロードする方法は?

  27. 27

    ベンダーとアプリのコードを効率的に分割するWebpackワークフロー

  28. 28

    アセンブリのプログラムを理解する

  29. 29

    ブースト グラフ ライブラリで指定された頂点の隣接をランダムに選択する効率的な方法は?

ホットタグ

アーカイブ