如果知道最大堆大小,如何计算最大对象大小?

Evg*_*eev 6 java

我使用-Xmx256M运行此测试以确定我可以在堆上创建的最大对象大小

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

并获得171M.有没有办法计算这个尺寸?

Ste*_*n C 3

有没有办法计算这个尺寸?

不会。最大可分配对象大小取决于堆中可用的连续可用空间量。AFAIK,除了做你目前正在做的事情之外,没有任何实际的方法可以找出可能是什么。