gpt4 book ai didi

Java 堆大小和内存不足

转载 作者:行者123 更新时间:2023-12-01 18:41:28 25 4
gpt4 key购买 nike

我正在尝试用 java 读取大约 3m 行的文件(tab 或 csv 文件);还将虚拟机内存添加到-Xmx6g。该代码对于制表符分隔文件的 400K 行运行良好,而对于 csv 文件则稍少一些。涉及许多 LinkedHashMap 和 Vector,我尝试在每几百行之后使用 System.gc() 来释放内存和垃圾值。但是,我的代码在 400K 行后出现以下错误。

线程“main”中出现异常java.lang.OutOfMemoryError:Java堆空间

at java.util.Vector.<init>(Vector.java:111)
at java.util.Vector.<init>(Vector.java:124)
at java.util.Vector.<init>(Vector.java:133)
at cleaning.Capture.main(Capture.java:110)

最佳答案

您加载整个文件的尝试从根本上来说是不幸的。您可以优化所有您想要的,但您只会将上限推高一点。你需要的是消除限制本身。

您实际上一次需要内存中的全部内容的可能性非常小,可以忽略不计。您可能需要从这些数据中计算一些东西,因此您应该开始找出一种方法来逐 block 进行计算,每次都能够丢弃处理过的 block 。

如果您的数据深度交织在一起,导致您无法序列化计算,那么合理的解决方案是,正如 HovercraftFOE 上面提到的,将数据传输到数据库中并从那里开始工作,对您需要的所有内容建立索引,对其进行规范化等。

关于Java 堆大小和内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19821133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com