2013-04-27 140 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。