java - 即使 int 数组值存在于范围内,Java 运行时错误
问题描述
允许的最大int
数据类型数组范围是 2147483647。但我得到了
运行时错误:线程“main”中的异常 java.lang.OutOfMemoryError:Test.main 处的 Java 堆空间(Test.java:3)
有人可以解释一下这个大小的内存表示以及为什么 JVM 会为此引发运行时错误吗?
代码:
class Test{
public static void main(String[] args){
int [] x = new int[1000000000];
}
}
解决方案
您正在使用特定 JVM 或系统内存的限制。
您正在尝试分配一个将占用约 4GB 连续内存的数组。我希望机器上的 64 位 JVM 有足够的内存来处理它而不会出现任何问题,但是不同的 JVM 可能有不同的限制。例如,我希望任何 32 位 JVM 都会遇到这种情况。
好消息是,在常规编程中几乎不需要分配这么大的数组。如果您确实需要它,则需要确保您在支持它的环境中工作。
即使在可以处理您的示例的机器上,如果我进一步增加大小,我也会遇到两个错误之一,您得到的错误之一是:
线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间
或 2147483646 或 2147483647:
线程“主”java.lang.OutOfMemoryError 中的异常:请求的数组大小超过 VM 限制
(第一个发生在我机器上的 1064000000 和 1065000000 之间。)
推荐阅读
- json - 在 pyspark 中读取 DStrem 中的嵌套 JSON 数据
- python - 在pytorch中获取gradCam的渐变
- python - 拆分具有不同的txt文件
使用 python 进行搜索 - flutter - 通过按下按钮更改颤振未来构建器中的未来值
- function - 了解 DART 中的递归函数
- sql - 如何从sql plus查询中减去毛利中的费用?
- python - 在VSCode Python中连接到服务器时无法运行多个文件
- javascript - 第一次点击触发第一个功能很简单 - 第二次点击触发另一个功能不起作用?
- c# - 初始化两次用户控件会导致开销
- python - 无需使用 Python 打开 Excel 即可刷新数据透视表