java - 大小为 10^8 的数组作为 Java 中的输入
问题描述
如何将 size<=10^8 的数组作为输入并对其执行操作?
arr[i]<=10^8
.
下面的代码给出了运行时错误和 java.lang.OutOfMemoryError。我已经多次收到这个问题,但从未得到答案,因为它对 n 和 的大值给出了错误arr[i]
。我知道它不能以下面给出的方式完成。所以问题是,如何在 Java 中完成?
n=100000000;//User input
int[] arr=new int[n];
int[] b=new int[n];
for(int i=0;i<n;i++)
{
b[i]=arr[i]+1;
}
解决方案
首先,调查是否真的有必要将整个数组保存在内存中。在许多情况下,您只需一次处理一个元素即可执行所需的操作。
如果确实需要存储数组,则在示例中分配两个 int 数组,每个数组有 1e8 个元素。他们大约需要 800MB 的内存。这在现代硬件上并非遥不可及。只需确保以足够的堆空间启动 JVM。请参阅-Xmx
和-Xms
选项。
推荐阅读
- angularjs - 刷新页面删除非 URL $stateParam (ui-router)
- spring - JUNIT 5:将 spring 组件注入自定义 TestTemplateInvocationContextProvider
- java - 在 OAuth 2.0 中调用 REST http 方法补丁的 JAVA 代码
- java - 在我的应用程序上添加简单的 log4j
- perl - Perl 动态输入文件
- c++ - Json 序列化向量
到 json 数组 (nlohmann/json.hpp) - oracle - ORA-02199: 缺少 DATAFILE/TEMPFILE 子句
- oracle - 如何选择整个clob列oracle?
- c# - 如何从任务转换
- > 到任务
- >
- java - 使用资源文件(数据库连接参数、图像等)分发 Java 应用程序的最佳方式