1

HTML ストリッパー (Java で記述) のパフォーマンス テストを行っています。つまり、文字列 (実際には HTML コンテンツ) を HTML ストリッパーのメソッドに渡し、後者はプレーン テキスト (HTML タグとメタ情報なし) を返します。 )。

具体的な実装例はこちら

public void performanceTest() throws IOException {
    long totalTime;
    File file = new File("/directory/to/ten/different/htmlFiles");
    for (int i = 0; i < 200; ++i) {
        for (File fileEntry : file.listFiles()) {

            HtmlStripper stripper = new HtmlStripper();
            URL url = fileEntry.toURI().toURL();
            InputStream inputStream = url.openStream();
            String html = IOUtils.toString(inputStream, "UTF-8");
            long start = System.currentTimeMillis();
            String text = stripper.getText(html);
            long end = System.currentTimeMillis();
            totalTime = totalTime + (end - start);

      //The duration for the stripping of each file is computed here
     // (200 times for each time). That duration value decreases and then becomes constant
     //IMHO if the duration for the same file should always remain the same.
     //Or is a cache technique used by the JVM?         


        System.out.println("time needed for stripping current file: "+ (end -start));
        }
    }
    System.out.println("Average time for one document: "
            + (totalTime / 2000));

}

ただし、各ファイルのストリッピングの期間は、毎回 200 回計算され、減少する値は異なります。1 つの同じファイル X の期間が常に同じままである必要がある場合、IMHO!? それとも、JVM で使用されるキャッシュ技術ですか?

どんな助けでも大歓迎です。前もって感謝します

ホレス

注意: - 私は自分のマシンでローカル (リモート、http なし) でテストを行っています。- Ubuntu 10.04 で Java 6 を使用しています

4

2 に答える 2

4

これは完全に正常です。JIT は、メソッドをネイティブ コードにコンパイルし、頻繁に使用されるようになるにつれて、メソッドをより高度に最適化します。(ベンチマークが最終的に収束する「定数」は、JIT の最適化機能のピークです。)

タイミングを開始する前にメソッドを何度も実行しないと、Java で適切なベンチマークを取得することはできません。

于 2012-05-03T16:06:50.223 に答える
0

私見 1 つの同じファイル X の期間が常に同じままである必要がある場合

最適化ジャストインタイム コンパイラが存在する場合ではありません。とりわけ、特定のメソッド/ブランチが使用された回数を追跡し、Java バイト コードをネイティブ コードに選択的にコンパイルします。

于 2012-05-03T16:08:03.050 に答える