簡體   English   中英

我的Java程序最多使用多少內存?

[英]How much memory does my java program use in maximum?

通過在這里找到的以下類,我可以獲得有關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);
    }
}

因此,方法本身不會占用JVM上的內存,這是您在方法等中創建的對象。創建方法本身只會在已編譯的類上創建更大的占用空間。

您可以嘗試使用諸如VisualVMJProfiler之類的配置文件 嘗試在Debug中設置斷點,並在逐步執行程序時注意所謂的“問題區域”,觀察這些事件探查器中的內存。

這些分析器將為您提供許多性能統計信息,以使您大致了解所需的內存等。

許多年前,我玩過Classmexer代理,該代理可以測量特定對象的深層內存使用情況。 http://www.javamex.com/tutorials/memory/instrumentation.shtml

恕我直言,在大多數情況下,使用Java Profiler進行大范圍使用更有用。 我想,除了好玩之外,如果真的需要在堆中存儲很多實例,Classmexer的一個用例之一就是進行大小調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM