好吧,所以我正在研究一个自定义数据结构,它使用相当多的数组来有效地存储大量(数百万个条目),但我想知道;调整数组大小最有效的方法是什么?
我的自然倾向是使用二进制幂来选择数组大小,例如 - 4、8、16 等的大小,但由于 Java 数组也包括它们的长度,我是否应该将其视为一个附加元素,即 -如果我存储一个整数数组,我是否应该使用 3、7、15 等大小来代替,以考虑额外的整数?
我意识到在大多数情况下这可能是学术性的,但是选择新的数组大小已经是我的代码中自己的功能,因此它很容易调整,而且我很想知道。
最佳答案
我在这里问了基本相同的问题:Determine the optimal size for array with respect to the JVM's memory granularity (但没有得到有用的回复)
选择完美数组大小的主要问题是,它需要了解虚拟机如何在内存中实际布局数组,并且无法预先确定,因为它在很大程度上取决于平台架构,还有虚拟机版本和可能的虚拟机参数(例如 64 位的压缩 OOP 开/关)。
您可以查找典型虚拟机设置的粒度,或者简单地将合理的假设硬编码到您的阵列大小选择中。
编辑:有一个解决方案,但它不可移植(使用 Unsafe 类): http://openjdk.java.net/projects/code-tools/jol/
关于java - Java 中哪个更有效的整数数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24312499/