Does jmap force garbage collection when the live option is used?(使用 live 选项时,jmap 是否强制进行垃圾收集?)
问题描述
我今天一直在试验 jmap -histo
和 jmap -dump
I've been experimenting with jmap -histo
and jmap -dump
today
按此顺序运行时
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
中不存在.
heap.3
resembles heap.2
more than heap.1
. In particular, the "dead" objects that I'm interested in in heap.1
are absent from heap.3
.
看到这一点,我开始寻找能够告诉我应该期待什么的文档.我设法得到的最接近的是 this discussion,briand 和 alanb 的评论在实践中暗示了这一点当我使用 live 选项时,我可以预期会发生此 GC;但答案是五年前的事了,论坛上的帖子似乎有点非正式的规范.
Seeing this, I started looking for documentation that would tell me what I should expect. The closest I managed to get was this discussion, where the comments from briand and alanb imply that in practice I can expect this GC to occur when I use the live option; but the answers are five years old, and posts to a forum seem a bit informal for a specification.
在哪里可以找到记录的当前行为?
Where can I find the current behavior documented?
推荐答案
为了确定 liveness,Java 必须运行 full GC,所以是的,它确实如此.
In order to determine liveness, Java has to run full GC, so yes, it does.
为了让问题沉睡......如果有人需要更深入地挖掘,这就是答案.随意.
To put the question to sleep... here is the answer, if anyone needs to dig deeper. Feel free.
/hotspot/agent/src/share/vm/services/attachListener.cpp的一部分取自
openjdk http://download.java.net/openjdk/jdk7/并且您必须接受 http://www.gnu.org/licenses/gpl-2.0.html
openjdk http://download.java.net/openjdk/jdk7/ and you must accept 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) :`
这篇关于使用 live 选项时,jmap 是否强制进行垃圾收集?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 live 选项时,jmap 是否强制进行垃圾收集?


基础教程推荐
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- 降序排序:Java Map 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01