使用live选项时,jmap是否会强制进行垃圾回收?

我一直在尝试jmap -histojmap -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的评论暗示实际上,我可以期望使用live选项时会出现该GC。但答案已有5年之久了,在论坛上发帖似乎对规范不拘一格。

在哪里可以找到当前记录的行为?

回答:

为了确定活动性,Java 必须 运行完整的GC,因此可以。


让问题沉睡…如果有人需要更深入地研究,这里就是答案。放心吧。

/hotspot/agent/src/share/vm/services/attachListener.cpp的一部分 来自

// 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) :`

以上是 使用live选项时,jmap是否会强制进行垃圾回收? 的全部内容, 来源链接: utcz.com/qa/418832.html

回到顶部