在 Java 中,假设有 3 个 java 应用程序正在运行。
a) 首先,我的应用程序正在运行
b)其次,不是我做的java应用程序运行
c) 第三,不是我做的 java 其他运行的应用程序
d) 第四,我运行以下方法的另一个应用程序:
public static void printGCStats() {
long totalGarbageCollections = 0;
long garbageCollectionTime = 0;
for(GarbageCollectorMXBean gc : ManagementFactory.getGarbageCollectorMXBeans()) {
long count = gc.getCollectionCount();
if(count >= 0) {
totalGarbageCollections += count;
}
long time = gc.getCollectionTime();
if(time >= 0) {
garbageCollectionTime += time;
}
}
System.out.println("Total Garbage Collections: "
+ totalGarbageCollections);
System.out.println("Total Garbage Collection Time (ms): "
+ garbageCollectionTime);
}
问题是:d) 将仅显示 d 垃圾收集详细信息,还是将显示所有内容,包括 a + b + c +d?一旦我请求 System.gc 或 runtime.gc,它会请求单个还是全部?
最佳答案
每个 Java 进程都在单独的 JVM 中运行。每个 JVM 都有自己的堆,与其他 JVM 的堆分开。
您正在查看的统计信息仅针对该过程。同样,System.gc()
仅适用于调用它的进程的堆。
关于java - 当我们向 GC 索取信息或要求清理 GC 时。它是对所有人进行清理还是对执行者进行清理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9838031/