java - 当我们向 GC 索取信息或要求清理 GC 时。它是对所有人进行清理还是对执行者进行清理?

标签 java linux garbage-collection jvm

在 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/

相关文章:

node.js - 当我手动执行垃圾收集器时,我如何知道它何时完成?

java - 使用 jung 的连通图的深度优先遍历不显示右遍历

java - 创建无限短生命周期线程

定期调用已创建线程的函数(手动调度)

linux - 如何使用来自外部服务器 linux 的数据启动本地程序

Cocoa分布式对象、GC客户端、非GC服务器

c# - 为什么 GCHandle.Alloc 不能固定包含引用的对象?

java - IzPack 快捷方式噩梦

java - 如何更改方法中字符串的字符? (相同字符,随机顺序)

regex - 如何使用 bash(3.2.25) 的一个额外的二元运算符 :=~