gpt4 book ai didi

java第一次遇到heap space error server data logger

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:15 25 4
gpt4 key购买 nike

我构建了我的第一个 Java 程序,它构建在 Interactive Brokers Java API 之上.这可能重要也可能不重要。我只是用几个新类扩展了主要的 API 类。

程序正在向远程服务器查询数据。当服务器响应时,我将接收到的数据记录到本地 MySQL 数据库中。一旦程序完成记录数据,程序将发出下一个数据请求。

在发出几百个服务器请求后,让程序运行一段时间后我遇到了问题。我会看到这个错误,然后程序不会继续执行:

java.lang.OutOfMemoryError: Java heap space

我做了一些研究,根据我读到的内容,我得出结论,该程序正在创建许多新变量,而不是破坏旧的无值(value)变量。由于我使用 Netbeans 进行开发,因此我使用了 Netbeans profiler检查是否是这种情况。看这里的图片:

enter image description here

程序运行一段时间后,Byte 占用的内存越来越多。所以看来我的理论还是对的。

我真的不知道从这里去哪里。没有对类或特定变量的引用,只有变量类型。如何查明问题出在哪里?

更新

我更正了 BigMike 在评论中提到的一个特定问题。以前,我在 JDBC MySQL 连接器 API 中创建了许多语句,我调用 .execute() 来执行语句,但我没有用 .close() 关闭语句

我确保在每次执行后添加 statement.close() 调用,现在程序运行得更好了。通过查看该程序的 RAM 使用情况,似乎可以解决问题。我也没有再看到 Java heap space 错误,这很好。

谢谢!

最佳答案

仅凭这一点很难说出哪里出了问题。

这可能与您打开的 Streams 有关,当您不再需要它们时不会关闭它们。仔细检查分配资源的方法(从文件、数据库等读取),尤其是当它们将数据读入流时,并确保在 finally 子句中关闭这些流。

除此之外,您可以尝试分析哪些方法被更频繁地调用等等,以尝试将问题缩小到代码的特定部分。

我找到了一个网站,该网站对垃圾收集的工作原理以及可能导致 OutOfMemoryErrors 的原因进行了合理的解释:

http://www.kdgregory.com/index.php?page=java.outOfMemory

如果您通读了这篇文章,其中有一个关于 Object[] 和 byte[] 的高分配的具体引用,这可能会为您指明正确的方向。

关于java第一次遇到heap space error server data logger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15413500/

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