java - Java 中哪个更有效的整数数组大小

标签 java arrays memory memory-management

好吧,所以我正在研究一个自定义数据结构,它使用相当多的数组来有效地存储大量(数百万个条目),但我想知道;调整数组大小最有效的方法是什么?

我的自然倾向是使用二进制幂来选择数组大小,例如 - 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/

相关文章:

java - java中如何进行二分查找

c++ - 二维数组 - 创建虚拟生物? (C++)

javascript - 寻找数组的众数? JavaScript

c++ - C/C++ 严格别名、对象生命周期和现代编译器

java - 在 JPA 中将实体添加到大型多对多关系中

java - 我的方法中出现错误 ""- XPATH 与特定文本

java - 从不同位置运行代码时,外部 jar 出现 noClassdeffoundError

C 数组初始化 - 一些基础知识

c++ - 数组如何在 C/C++ 中内部工作

python - 使用 beautifulsoup 4 进行 xml 会导致奇怪的行为(内存问题?)