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

标签 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,分配大小必须在编译时已知,它的引用不能分配给堆对象等。)任何资源都值得赞赏。

最佳答案

这在 Java Magazine 的一篇文章中进行了讨论

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

关于java - 逃逸分析是否有助于 JVM 在堆栈上分配数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51686170/

相关文章:

java - 寻找一种更快的方法来执行字符串搜索

java - Android:从MySQL数据库获取数据

java - Spring安全过滤器应该直接调用身份验证提供者吗?

c++ - 二维数组及其在 C++ 中的性能

java - 是否指定异常?

Mysql MEMORY 表 vs InnoDB 表(很多插入,很少读取)

java - boolean 多返回重构

java - Scala 的哪些特性无法转换为 Java?

performance - 通过 IndexReader 或 IndexSearcher 打开目录?在 lucene 中

c++ - 当所有时间似乎都花在内存分配上时如何提高抽象工厂的性能