使用live选项时,jmap是否会强制进行垃圾回收?
我一直在尝试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的评论暗示实际上,我可以期望使用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