问题描述
我今天一直在试验 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 是否强制进行垃圾收集?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)