java - Java 中的长数组可以支持多少个索引?

标签 java

我必须使用索引范围为 0 到 33554432 的 long 数组。

它给出了一个错误:

"Exception in thread main java.lang.OutOfMemoryError: Java heap space".

short 数组不会给出此错误。我必须使用 long 数组和相同的索引,我该怎么办?

最佳答案

您可以通过使用整数文字访问数组这一事实得到提示。由于整数文字最多只能达到 Integer.MAX_VALUE,这就是您的数组可以拥有的索引(和元素)数量。 arshajii brings up another hint .

您的问题只是因为您的应用程序没有足够的内存来创建那么多 long 但有足够的内存来创建那么多 short .请记住,当数组被初始化时,它的元素也被初始化为默认值。对于原始类型,该值为 00.0。需要考虑的事项(取决于您的环境)

Long[] array = new Long[33554432]; // allocation would work
long[] array = new long[33554432]; // allocation would fail

这是因为引用类型被初始化为null 引用,所以只有引用占用空间。所以你可以开始添加元素,但它最终也会失败。

使用更多内存启动您的应用程序。

关于java - Java 中的长数组可以支持多少个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19189659/

相关文章:

java - SQLite 更新后获取旧值

java - 在 JInnerFrame 中使用 AWT 组件(对于 JDesktopPane)

java - 相同的代码块在java中的运行时间是不同的。这是为什么?

java - 让 Guice 的 FactoryModuleBuilder 创建一个返回模拟的工厂?

java - Golang 的 WaitGroup 的 Java 等价物是什么

java - 保留特殊订单/按 map 排序

java - 哪个存储库有 eXist 以及如何使用 gradle 将其添加到类路径中?

java - 如何在 Wicket 1.5 中禁用序列化?

java - `ArrayList::get` 是线程安全的吗?

java - 在 LibGDX 中处置 Assets 管理器