2013-04-27 110 views
5

我跑這個測試與-Xmx256M確定,我可以堆如果知道最大堆大小,如何計算最大對象大小?

for (int m = 128;; m++) { 
     try { 
      byte[] a = new byte[m * 1024 * 1024]; 
     } catch (OutOfMemoryError e) { 
      System.out.println(m + "M"); 
      break; 
     } 
    } 

創造最大對象大小,得到了171M。有沒有辦法計算這個大小?

+1

for循環的增量應該是'm ++'嗎? – michaelb958 2013-04-27 03:52:41

+0

是的,這是米,謝謝 – 2013-04-27 03:53:53

+1

我用'-XX:+ UseG1GC'並得到了'255M'。 – johnchen902 2013-04-27 04:12:59

回答

2

有沒有辦法計算出這個尺寸?

號的最大可分配的對象大小取決於連續自由空間在堆中使用的量。 AFAIK,除了做你現在正在做的事之外,沒有找到可能的實際方法。

0

這很有趣,我跑同樣的事情:

java -Xmx256M -XX:+AggressiveHeap HeapTest //I hoped this would help 

但我不斷地得到較少然後用AggressiveHeap。