当我运行jcmd PID help GC.heap_dump
时,帮助会明确说明将调用完整的GC,除非指定了-all
标志:
GC.heap_dump
...
影响:高:取决于Java堆的大小和内容。除非指定'-all'选项,否则请求完整的GC。
-all:[可选]检查所有对象,包括不可达的对象(BOOLEAN,false)
如果我运行jcmd PID help GC.class_histogram
,则帮助不会说明强制使用完整的GC,但是“ Impact”仍然被称为“高”,并且该选项仍具有-all
标志,其行为与:
GC.class_histogram
...
影响:高:取决于Java堆的大小和内容。
-all:[可选]检查所有对象,包括不可达的对象(BOOLEAN,false)
我尝试在几个环境中运行此命令,但未调用完整GC。但是,由于它“取决于Java堆的大小和内容”,因此我不确定。
那么在某些情况下GC.heap_dump
是否可以调用完整的GC?如果是,那是什么?
参考方案
jcmd PID GC.class_histogram
默认情况下将导致Full GC。
如果目标JVM是使用-XX:+PrintGC
启动的,您将看到一条日志消息,例如
// JDK 8:
[Full GC (Heap Inspection Initiated GC) 1397K->331K(126720K), 0.0023298 secs]
// JDK 9:
[15.503s][info ][gc] GC(0) Pause Full (Heap Inspection Initiated GC) 2M->0M(8M) 8.107ms
但是,使用-all
选项时,与GC.class_histogram
完全一样,对于GC.heap_dump
,将没有Full GC。在HotSpot sources中找到证明:
void ClassHistogramDCmd::execute(DCmdSource source, TRAPS) {
VM_GC_HeapInspection heapop(output(),
!_all.value() /* request full gc if false */);
VMThread::execute(&heapop);
}
子类可以创建抽象的超类类型的对象吗? - java我不确定我是否正确问了这个问题,但我是在作业中给我的ClassA是抽象的B类扩展了A类那么在ClassB的主要方法中,我们有:ClassA obj =新的ClassB();这里发生了什么,这样做的目的是什么? 参考方案 您永远无法创建来自抽象类的对象。曾经期。在这里,被分配了对象的变量是抽象类型,但是变量所指的对象本身不是,也永远不可能是。引用和引用变量之间…
使用JIT进行的优化是否只发生一次,并且可以永久保留,或者仅在运行的生命周期中保留? - java我在Just-in-time compilers上阅读过不同的文章,并且提到JIT将代码片段(热点)优化为直接的本机代码(机器代码)。我的问题是每当我运行.class file时,都会发生这种优化吗?另一方面,传统的compiled代码会一劳永逸地进行优化,而不仅仅是在一个execution中进行优化。在hot-spot optimization中如何“记住…
反转GregorianCalendar对象添加分钟方法 - java当向GregorianCalender对象添加一分钟时,我们像下面这样进行操作,这将使时间增加一分钟:GregorianCalendar gc = new GregorianCalendar(TimeZone.getTimeZone("UTC")); gc.add(Calendar.MINUTE,1); 但是由于错误,我将其反转为:Gre…
从对象转换为原始类 - java我将Entry类的实例存储在Object中。Entry newentry = new Entry(j, 0.0); Object test = newentry; 如何将test对象转换回Entry类以访问Entry类方法getValue()? 参考方案 输入它:Entry newentry = new Entry(j, 0.0); Entry test =…
在类中创建类的实例 - java考虑一下我有以下两个嵌套类:public class Foo { public class Bar { } } 我的目标是创建类Bar的实例。我尝试通过以下方式进行操作:// Method one Foo fooInstance = new Foo(); Foo.Bar barInstance = new fooInstance.Bar // fooInst…