簡體   English   中英

Java程序使用了多少內存

[英]How much memory is used by Java program

我環顧了一下,關於JVM正在使用多少內存的問題,我已經看到了很多答案。 這些涉及諸如對Runtime.totalMemory()/ Runtime.freeMemory()的調用。

但是,這些未考慮垃圾收集。 例如,假設我們有大量設置為null的對象,這些對象尚未被垃圾回收。 調用Runtime.totalMemory()將顯示可用總內存遠低於實際技術可用的內存,因為這些空對象仍在內存中。

所以我的問題是:有沒有更好的方法,無論是Java本身還是來自第三方工具的數據(可以移植到程序中),以動態判斷Java程序正在使用多少內存?

編輯:這需要在代碼本身中可以完成。 缺少對發送的每條消息調用geObjectSize()的想法,我想不出另一種方法。

您可以像JProfiler這樣的探查器,並為特定程序找出實時使用的內存量。

通常,在垃圾回收之前,此信息是未知的。

如您所述,在垃圾回收之后,您可以使用Runtime.totalMemory()Runtime.freeMemory()計算當前使用的內存量。

...說我們有大量的對象設置為null ...

對象不能設置為null。 您可以將對對象的引用設置為null。 將對對象的特定引用設置為null 不會立即將該對象標記為有資格進行收集

當物體不再可達時可以收集它們。 垃圾收集的一部分是確定對象是否不再可訪問。

您可以嘗試的一件事是建議虛擬機釋放更多的內存。 但是,這只是一個建議,因此在后續的垃圾回收之后實際上可能會有更多的可用內存。

public long getUpperBoundOfActiveMemoryUsage() {
    System.gc(); // Suggest that some garbage collection occur.

    return getUsedMemory();
}

public long getUsedMemory() {
    Runtime runtime = Runtime.getRuntime();
    long totalMemory = runtime.totalMemory();
    long freeMemory = runtime.freeMemory();
    long usedMemory = totalMemory - freeMemory;
    return usedMemory;
}

暫無
暫無

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

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