34

私は実験してきましたjmap -histoそしてjmap -dump今日

このシーケンスで実行する場合

jmap -dump:format=b,file=heap.1 [pid]
jmap -dump:live,format=b,file=heap.2 [pid]
jmap -dump:format=b,file=heap.3 [pid]

heap.3に似ていheap.2ますheap.1。特に、私が興味を持っている「死んだ」オブジェクトはにheap.1ありませんheap.3

これを見て、私は私が何を期待すべきかを教えてくれるドキュメントを探し始めました。私が何とか得た最も近いものはこの議論でした。そこでは、briandとalanbからのコメントは、実際には、ライブオプションを使用したときにこのGCが発生することを期待できることを示唆しています。しかし、答えは5年前のものであり、フォーラムへの投稿は仕様については少し非公式のようです。

文書化されている現在の動作はどこにありますか?

4

1 に答える 1

41

活性を判断するために、Java完全なGCを実行する必要があるため、そうです。


質問を眠らせるために...誰かがもっと深く掘り下げる必要があるなら、ここに答えがあります。お気軽に。

/hotspot/agent/src/share/vm/services/attachListener.cppの一部から取得

openjdkhttp : //download.java.net/openjdk/jdk7/そしてあなたはhttp://www.gnu.org/licenses/gpl-2.0.html を受け入れる必要があります

// Implementation of "inspectheap" command
//
// Input arguments :-
//   arg0: "-live" or "-all"
static jint heap_inspection(AttachOperation* op, outputStream* out) {
  bool live_objects_only = true;   // default is true to retain the behavior before this change is made
  const char* arg0 = op->arg(0);
  if (arg0 != NULL && (strlen(arg0) > 0)) {
    if (strcmp(arg0, "-all") != 0 && strcmp(arg0, "-live") != 0) {
      out->print_cr("Invalid argument to inspectheap operation: %s", arg0);
      return JNI_ERR;
    }
    live_objects_only = strcmp(arg0, "-live") == 0;
  }
  VM_GC_HeapInspection heapop(out, live_objects_only /* request full gc */, true /* need_prologue */);
  VMThread::execute(&heapop);
  return JNI_OK;
}

vmGCOperations.hppではそれが定義です

`VM_GC_HeapInspection(outputStream* out, bool request_full_gc,
                   bool need_prologue) :`
于 2011-10-31T18:29:19.887 に答える