java - java中的大容量数组编程

标签 java

如何在java中声明大小为10^9的数组?。我尝试过数组列表,但问题是我需要找到数组中的最小和最大元素,所以我需要将数组的第0个元素与所有其他元素进行比较数组的元素,我最初需要一些固定大小的数组,这是代码厨师上数组的输入格式所必需的。有人可以帮忙吗?我尝试使用长数组,但它给出了内存不足错误。

最佳答案

Java 数组的最大大小等于 Integer.MAX_VALUE(或者在某些情况下略有不同的值),约为 2.3 * 10^9,因此理论上创建这么大的数组是可行的可能的。然而,由于 10^9 意味着前缀 giga(为了更容易阅读),数组的大小至少为 1GB(使用 byte[] 时)。根据您使用的数据类型,数组可能会占用太多内存(int[] 已经占用 4GB)。

您可以尝试使用 -Xmx 选项增加 JVM 的最大内存(例如,要允许最大 4GB,您可以使用 -Xmx=4g),但是您仍然受到最大可寻址内存(例如 IIRC,32 位 JVM 总共只能寻址最高 4GB)和可用内存的限制。

或者,您可以尝试将阵列拆分到多台机器或 JVM 上,并采用某种分布式方法。或者您可以将数组写入(内存映射)文件并仅将数组的一部分保留在内存中。

但是,最好的方法可能是检查您是否真的需要那么多内存。在许多情况下,使用一些巧妙的算法或结构可以显着减少内存需求。使用什么取决于您最终想要实现的目标。

关于java - java中的大容量数组编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37815660/

相关文章:

java - 为什么要创建延迟,首选对 Thread.sleep 的静态引用而不是 this.sleep?

java - 如何以用户友好的方式过滤错误消息,而无需在 Android 中创建自定义字符串?

java - Hibernate Criteria 连接到包含外键的表

Java - 当从另一个方法创建对象时,尝试从主方法中打印对象的 get 方法

java - 更改控件的颜色 FX PopOver 标题

java - 获取动态生成的java类的源代码

java - 如何修复此 MySQL 语法错误

java - java中的@Documented注解

java - 导出的 APK 不起作用

java - Criteria Builder 中的 Join 中的 getOn 不起作用