1

通过我在这里找到的以下类,我可以获得有关 VM 内存的一些统计信息。

但是还有一种方法可以获得我的程序所需的最大内存或我的程序的特定方法吗?

/**
* Class: TestMemory
* @author: Viral Patel
* @description: Prints JVM memory utilization statistics
*/
public class TestMemory {

    public static void main(String [] args) {

        int mb = 1024*1024;

        //Getting the runtime reference from system
        Runtime runtime = Runtime.getRuntime();

        System.out.println("##### Heap utilization statistics [MB] #####");

        //Print used memory
        System.out.println("Used Memory:"
            + (runtime.totalMemory() - runtime.freeMemory()) / mb);

        //Print free memory
        System.out.println("Free Memory:"
            + runtime.freeMemory() / mb);

        //Print total available memory
        System.out.println("Total Memory:" + runtime.totalMemory() / mb);

        //Print Maximum available memory
        System.out.println("Max Memory:" + runtime.maxMemory() / mb);
    }
}
4

2 回答 2

0

许多年前,我玩过 Classmexer 代理,它可以测量特定对象的深内存使用情况。 http://www.javamex.com/tutorials/memory/instrumentation.shtml

恕我直言,在大多数情况下,使用 Java Profiler 来了解全局使用情况会更有用。我想,除了为了好玩之外,如果你真的需要在堆中存储大量实例,Classmexer 的一个用例就是进行大小调整。

于 2013-06-21T17:41:19.340 回答
0

因此,方法本身不会占用 JVM 上的内存,而是您在方法中创建的对象等。创建方法本身只会在已编译的类上产生更大的占用空间。

您可以尝试使用诸如VisualVMJProfiler之类的东西进行分析。尝试在 Debug 中设置断点,并在逐步执行程序时观察这些分析器中的内存,注意所谓的“问题区域”。

这些分析器将为您提供大量性能统计信息,让您大致了解所需的内存等。

于 2013-06-21T17:13:00.427 回答