Javaメソッドコードを入力として受け取り、そのコードのコスト関数(ループの数、if/elses、I/Oおよび他の一般的なもの)を決定するアプローチが既に存在するかどうかを知りたいです。 正確なコストはミリ秒ではありませんが、このコードが引き起こす一般的なコストを意味します。 私は、そのようなメソッドのコストになる可能性があることをユーザーが書くために書く任意のメソッド(JVMなどのようないくつかの特異性を考慮しない)を可能にしたいと考えています。任意のJavaメソッドの一般的なコスト関数を決定する方法はありますか?
答えて
そのようなツールが存在する場合、私は知らないが、私はその実現可能性とその使いやすさの両方を疑う:
一般的なケースでは、そのようなツールの実現可能性についてはHalting problemを見て、どのあなたが求めているものの重要な部分であり、undecidableであることが証明されています。そのようなツールの使いやすさのため
、Iは、システムの性能の重要な部分は、その入力に、即ちその使用パターン、に依存するため、それ自身で静的コード分析は、無駄であると考えています。
ランタイムのベンチマークシステムでさえ、単純明快ではない理由があります。いくつかのケースでは同じソフトウェアが驚くほど速く、他のソフトウェアでは驚異的に遅くなる可能性があります。前記
は、several tools for code complexity analysisあるが、それらのメトリックは、性能よりも品質及び保守に詳細に関する構造的な複雑さ、に焦点を当てます。
ループの数については、/ elsesの場合、循環的複雑度メトリックを使用できます。それを計算するツールがあります。たとえば、JavaNCSSです。他のものに関しては、あなたが何を正確にあなたが興味を持っているか決定する必要があります。software metricsがたくさんあり、それらのいくつかはあなたに適しているかもしれません。そうでない場合は、あなたのことを発明して実装することができます。異なるメトリックを収集するための別の一般的なツールであるPMDは、独自のルールを書くことができます。
コードのパフォーマンスを自動的に予測したい場合は、運が悪いです。理由は、thkalaによって指摘され、その他には、JVM JITコンパイルと実行時の最適化が含まれます。ここであなたの親友はプロファイリング、(自動化された)パフォーマンステストとアルゴリズム解析です。静的分析では、という文字列を連結したり、ループ内にオブジェクトを割り当てるなどのパフォーマンス上の問題が発生する可能性があります。現代のIDEがこれを行うことができます。それでも、パフォーマンスは主にアルゴリズムとアーキテクチャによって決定されるため、静的解析の方法ではほとんど改善されません。
ありがとうございました!はい、私は構造的な複雑さが私に実際のコストを与えることはありませんが、そこから始めて、それ以外のものを考慮に入れる必要があることを知りたいと思います。私はこれらのリンクを勉強し、私は何ができるかを見ていきます。 – kepha
- 1. 任意のデータベースに接続して任意のSQLクエリを実行する一般的なVBscript関数
- 2. 任意のテーブルのINSERTスクリプトを作成する一般的な方法
- 3. Pythonには一般的なメソッドがありますか?
- 4. 一般的なメソッドとパラメータとして任意の列挙を渡す
- 5. C#の一般的な操作のコスト?
- 6. 2Dベクトルの一般的な方向を決定します
- 7. 一般的なPerl関数を独自のスクリプトにカプセル化する方法はありますか?
- 8. 一般的なlispイディオム - 良い方法がありますか?
- 9. "悪意のある"ユーザ入力をレールアプリケーションに拒否する一般的な方法があります
- 10. ユーザーレイアウトを保存する一般的な方法はありますか?
- 11. CLOSオブジェクトを複製する一般的な方法はありますか?
- 12. サンク/機能を「視覚化する」方法はありますか?または一般的な引数のための関数を表示する方法
- 13. PHPで任意のパラメータ値を指定する方法はありますか?
- 14. mathematicaで一般的な関数を定義するには?
- 15. C#でメソッドCALLを渡す方法はありますか? (ではない一般的な機能/デリゲートタイプ)
- 16. 基本クラスでより一般的なメソッドがある場合、基本クラスのメソッドをオーバーライドする方法は?
- 17. 動的に任意のjs関数を呼び出す方法
- 18. 一般的なメソッドの定義
- 19. ListDictionaryクラスの一般的な代替方法はありますか?
- 20. 任意のメソッドをJavaの別のメソッドに関連付けますか?
- 21. コンソールJavaアプリケーションの一般的な統合テストフレームワークはありますか?
- 22. 任意の引数を持つ関数へのポインタをテンプレートパラメータとして持つ方法はありますか?
- 23. 一般的なユーザーのHABTMの役割の関係を設定する方法
- 24. ファンクタの戻り値の型を推定する一般的な方法は?
- 25. 一般的なハドソンのレポーターはありますか?
- 26. ニューラルネットワークの一般的な形式はありますか
- 27. Javaの一般的な質問:これ以上の方法はありますか?
- 28. Windows 2000のサポートに関する一般的な合意は何ですか?
- 29. 一般的な関数のjqueryプロトタイプ
- 30. 一般的なC++関数のラッピング
この質問は、静的解析の深い問題を扱っています。一般的に、ソリューションは非常に近似していますので、気になるケースで実際には機能しない可能性があります(読み込み、静的解析は難しい)。あなたが*なぜ*これを望んでいるかについてもう少し背景を述べたら、あなたが使うことができるツールについて、より洗練された答えを得ることができるかもしれません。 –
多くの超クールなアルゴリズムは、漸近的な複雑さを証明するためにかなり洗練された手法を必要とします。コードだけでそれを行うのは実用的ではありません。 –