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

时间:2018-08-04 13:40:19

标签: java performance optimization jvm jit

总之,这就是我要做的:

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,必须在编译时知道分配大小,不能将其引用分配给堆对象等。)任何资源都是值得的。

1 个答案:

答案 0 :(得分:2)

Java Magazine

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

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