逃逸分析是否有助于 JVM 在堆栈上分配数组?

Does escape analysis help JVM to allocate arrays on stack?

简而言之,这就是我所做的:

public void method(List<Integer> elems) {
    final int MAX_ELEM_COUNT = 32;
    ByteBuffer bb == ByteBuffer.allocate(MAX_ELEM_COUNT * Integer.BYTES);

    for (Integer elem : elems) {
         bb.putInt(elem);
    }

    bb.flip();

    ByteBuffer dest = getPermanentBufferForSize(bb.remaining());
    dest.put(bb);
}

临时缓冲区非常小(128 字节)并且没有转义,因此看起来很适合堆栈分配。 (ByteBuffer 对象本身及其引用的字节数组)。

JVM(尤其是 OpenJDK)曾经为数组做过吗?

如果他们这样做,触发这种逃逸分析的要求是什么? (我正在寻找 JVM 的实现细节,例如:它必须小于 4 kb,分配大小必须在编译时已知,它的引用不能分配给堆对象等。)任何资源都值得赞赏。

Java Magazine

的一篇文章对此进行了讨论

要转义的数组的默认大小限制(在撰写本文时)是 64,但可以通过 -XX:EliminateAllocationArraySizeLimit=N 标志进行调整。