2016-03-14 27 views
3
public class Test { 
     public static void main(String[] args) { 
      long heapsize = Runtime.getRuntime().totalMemory(); 
      System.out.println("heapsize is :: " + heapsize/(1024*1024)); 
     } 

} 

輸出是:運行時堆大小在Eclipse中設置

堆大小是:: 245

這是否意味着我的運行時間只有245M的內存?我的電腦有8GB內存。我懷疑這是正確的輸出,因爲單獨運行Eclipse會消耗超過245M。

在Eclipse中,我點擊Windows的>首選項> Java的>安裝的JRE,並設置爲默認JVM參數如下:

-ea -Xms256m -Xmx4096M 

然後再次運行測試。它仍然打印出相同的數字,245.這怎麼會發生?

編輯:從Java文檔的調用Runtime.getRuntime()totalMemory():

Returns the total amount of memory in the Java virtual machine. 
The value returned by this method may vary over time, depending on the 
host environment. 

回答

1

你的程序不會在Eclipse的堆空間運行。 Eclipse爲您的程序生成一個單獨的JVM。

Runtime.totalMemory()確實返回當前堆大小。

-Xms參數指定初始值堆大小。如果Java通過垃圾收集無法釋放足夠的內存,直到它達到最大值(如-Xmx所設置的值),Java將進行擴展。此時,JVM將以OutOfMemoryError退出。

Java的內存管理是一個複雜的話題,包括垃圾收集,從幼兒園的移動物體終身空間等

+0

調用Runtime.getRuntime()。totalMemory(),這說明了什麼?我有一個運行良好的程序,但今天突然間我收到了這個內存消息。 – user697911

+0

在Eclipse中,「Windows->首選項 - > Java->已安裝的JRE - >默認JVM參數」爲在Eclipse中運行的應用程序設置堆大小,而不是爲Eclipse本身。 – user697911

+0

擴展我的答案,希望能解決您的後續問題 – dovetalk

相關問題