Java的可用堆大小各不相同

时间:2018-12-02 03:15:38

标签: java heap

我刚刚发现有一些库可以计算java对象的浅层大小,因此我想我也可以用一种非常简单的方式编写它。这是我尝试过的。

  1. 以一些XmxA来启动程序
  2. 创建要计算其大小的类型的对象(例如,T类型)并将其存储在列表中,以免GC清理它们。
  3. 当我们点击OOM时,让代码处理它并清空列表。
  4. 现在检查分配给我们的T类型的对象的数量。设为n
  5. 进行二进制搜索以找出增量,以便成功分配n+1个对象。

这是代码,我尝试了

import java.util.ArrayList;
public class test {
    public static void main(String[] a) {
        ArrayList<Integer> l = new ArrayList<>();
        int i=0;
        try {
            while(true) {
                l.add(new Integer(1));
                i++;
            }
        } catch(Throwable e) {
        } finally {
            l.clear();
            System.out.println(i + "");
        }
    }
}

但是我注意到,每次运行中为同一Xmx分配的对象数量是变化的。为什么是这样? JVM内部是否有任何随机的东西?

0 个答案:

没有答案