私は、効率の方向でしばしば私に直面する答えの質問をしました。この種の質問を続けるのではなく、事前に効率を調べたいと思います。ただし、もちろん、さまざまな種類の効率があります。コードの行数、アセンブリ、書き込みにかかる時間、コンピューターの実行にかかる時間。そして、私はおそらくそれを見るもっと多くの方法を見逃しています。
効率を調べる方法はたくさんあるので、どのようにして独自のコードのアセンブリコードを取得し、コード内の適切な場所で停止するかから始めたいと思います。(500行のコードがあり、450行目から460行目に関心があるとします)。これがすでにIDEにある機能であるかどうかはわかりませんが、そうであれば、どうすればこのような機能を見つけることができますか?(=この機能がある場合、自分のIDEで見つけることができるように、これらの種類のものの名前は何ですか)。
(Stack Overflowの効率に関する情報はすでにたくさんあります。それらの多くを調べましたが、コードを分析するときに、人々が何から始めるのかを理解するのは難しいと感じました。彼らはコードの研究から始めますか?次に、組み立てますか、それともIDEを使用して最も高価なメソッドを見つけ、このように変更しますか?もちろん、さまざまな要因に大きく依存するため、これは悪い質問ですが、少なくとももう少し感じてもらいたいと思います。それのために、私はこの質問への答えが役立つかもしれないと思います。)
JVMによって生成されたアセンブリコードを分析しても、有用なものが得られる可能性はほとんどありません。パフォーマンスが心配な場合、これは間違ったアプローチです。低レベルの詳細を測定することによって、高レベルのパフォーマンスについて推論することはできません。これはおそらく、手動でサイクルを数えることができる最初のプログラムでうまく機能しました。今日、コンピューターははるかに複雑になっています。特にJavaなどの高級言語を使用している場合はなおさらです。考慮する必要があるものは次のとおりです。
これらのメカニズムとそれらの間の相互作用は、簡単に予測できるものではありません。私が知っている高速プログラムを書くための正しい方法は1つだけです。
ボトルネックを特定するために、私は通常JVisualVMから始めて、必要に応じてさらにいくつかの低レベルのツールを使用します。
99%の場合、問題はアルゴリズムの遅延、データ構造の誤り、ディスクアクセスの非効率性、またはデバッグログの残りのような愚かなことです。不必要なコピーやメモリの割り当てを回避するなどのマイクロ最適化が役立つことはあまりありません。まれに、他のすべてが失敗し、タイトなループから数サイクルを絞り出す必要がある場合は、生成されたアセンブリを確認する価値があるかもしれません。PrintAssembly
その場合に役立つかもしれません。あなたはあなたを助ける可能性が最も高いツールから始めたいと思っています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加