2

私は現在、カスタム データ構造で構成される Java で独自のペット プロジェクトを開発しています。パフォーマンスを測定するために Google Caliper フレームワークを選択しましたが、データ構造のメモリ使用量を測定するには、VisuamVm (ヒープをダンプし、オブジェクトの保持サイズの計算を待つ) を使用して毎回測定し、有効な結果を得る必要があります。ある種の「メモリベンチマーク」テストを行いたいです。

したがって、質問は次のとおりです。

データ構造のメモリ消費を測定するためのテストを作成できる、CaliperまたはJunitBenchmarksに似た Java フレームワークはありますか?

4

3 に答える 3

2

このツールはあなたに適しています。Open JDK - Java オブジェクト レイアウト

HashMap を調べるサンプル

$ java -jar jol-cli/target/jol-internals.jar java.util.HashMap
  Running 64-bit HotSpot VM.
  Using compressed references with 3-bit shift.
  Objects are 8 bytes aligned.
  Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
  Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]

  java.util.HashMap object internals:
   OFFSET  SIZE       TYPE DESCRIPTION                    VALUE
    0     4            (object header)                01 00 00 00 (00000001 00000000    00000000 00000000)
    4     4            (object header)                00 00 00 00 (00000000 00000000 00000000 00000000)
    8     4            (object header)                0f 0f 3e e0 (00001111 00001111 00111110 11100000)
   12     4        Set AbstractMap.keySet             null
   16     4 Collection AbstractMap.values             null
   20     4        int HashMap.size                   0
   24     4        int HashMap.threshold              16
   28     4      float HashMap.loadFactor             0.75
   32     4        int HashMap.modCount               0
   36     4        int HashMap.hashSeed               0
   40     4    Entry[] HashMap.table                  []
   44     4        Set HashMap.entrySet               null
   Instance size: 48 bytes (estimated, add this JAR via -javaagent: to get accurate result)
   Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
于 2014-03-10T14:25:23.517 に答える
0

そのためのライブラリについては知りませんが、メモリ使用量を測定するためにヒープ ダンプを取得するよりも優れたアプローチがありSystem.gc()ますRuntime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()

于 2014-03-10T14:35:11.370 に答える
0

メモリ ベンチマークには、スループットフラグメントの 2 つのポイントが含まれます。ここであなたがしたいことは、これらの環境にとってより良いデータ構造を選択することだと思います。この点については、この 2 点も測定する必要があると思います。

ここでは、OQL (オブジェクト クエリ言語) を使用して、このデータ構造の使用状況をクエリできます。hprofMATを使用して、システムのヒープ コンテキストを分析できます。

メモリ消費を測定するためのテストを作成するという質問を解決するには、次の手順をお勧めします。

  1. 生産的な環境を作る
  2. プログラムを実行する
  3. 重要な点として、ヒープをダンプできますJMX を使用して、フル GC の直前と直後に HPROF ヒープ ダンプを作成します
  4. MATVisualVMを使用して hprof を分析する
于 2014-03-10T14:51:28.443 に答える