跳到主要内容

怎么获取 Java 程序使用的内存?堆使用的百分比?

参考答案:

在 Java 中,你可以使用 java.lang.Runtime 类来获取程序使用的内存信息。以下是一个简单的示例,展示了如何获取 Java 程序的内存使用情况以及堆使用的百分比:

public class MemoryUsageExample {

    public static void main(String[] args) {

        // 获取 Runtime 实例
        Runtime runtime = Runtime.getRuntime();

        // 返回 Java 虚拟机试图使用的最大内存量。
        long maxMemory = runtime.maxMemory();

        // 返回 Java 虚拟机中的可用内存量。
        long allocatedMemory = runtime.totalMemory();

        // 返回可用内存量。
        long freeMemory = runtime.freeMemory();

        // 计算堆使用的百分比
        double heapUsagePercentage = ((double) (allocatedMemory - freeMemory) / maxMemory) * 100;

        System.out.println("Max Memory: " + maxMemory / 1024 / 1024 + "M");
        System.out.println("Allocated Memory: " + allocatedMemory / 1024 / 1024 + "M");
        System.out.println("Free Memory: " + freeMemory / 1024 / 1024 + "M");
        System.out.println("Heap Usage Percentage: " + heapUsagePercentage + "%");
    }
}

这段代码会输出以下信息:

  • 最大内存(Max Memory):Java 虚拟机试图使用的最大内存量。
  • 已分配内存(Allocated Memory):Java 虚拟机中的可用内存量。
  • 空闲内存(Free Memory):可用内存量。
  • 堆使用百分比(Heap Usage Percentage):已分配内存与最大内存之间的百分比。

注意,这里计算的是堆内存的使用百分比,而不是整个 JVM 的内存使用。此外,maxMemory 是在 JVM 启动时设置的,可以通过 -Xmx-Xms 参数来调整。如果程序需要更多的内存,而 JVM 没有足够的内存可用,那么可能会抛出 OutOfMemoryError