总之,这就是我要做的:
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,必须在编译时知道分配大小,不能将其引用分配给堆对象等。)任何资源都是值得的。
答案 0 :(得分:2)
(在撰写本文时)要转义的数组的默认大小限制为64,但是可以通过-XX:EliminateAllocationArraySizeLimit=N
标志进行调整。