程序运行后Java堆空间是否减少

程序运行后Java堆空间是否减少,java,mysql,heap,Java,Mysql,Heap,我编写了一个Java程序,可以解析mysql数据库并分配值。我第一次在数据库中的特定表上运行这个程序时,它运行得很好,并且已经完成。我试着在不同的表上运行它更多次,但它总是耗尽堆空间。堆空间是否仍在减少?现在感觉程序运行的时间比以前短得多。此程序的文件与第一次运行时的文件大小相同。这意味着您的程序中可能存在内存泄漏。您加载的某些对象没有被GCed,这会减少新对象的可用堆空间 您可能没有一些静态引用(或)数据库连接未关闭,如果没有看到一些代码,很难猜测。如果内存泄漏,可用空间量可能会减少。最大堆空

我编写了一个Java程序,可以解析mysql数据库并分配值。我第一次在数据库中的特定表上运行这个程序时,它运行得很好,并且已经完成。我试着在不同的表上运行它更多次,但它总是耗尽堆空间。堆空间是否仍在减少?现在感觉程序运行的时间比以前短得多。此程序的文件与第一次运行时的文件大小相同。

这意味着您的程序中可能存在内存泄漏。您加载的某些对象没有被GCed,这会减少新对象的可用堆空间


您可能没有一些静态引用(或)数据库连接未关闭,如果没有看到一些代码,很难猜测。

如果内存泄漏,可用空间量可能会减少。最大堆空间是固定的,一旦程序启动就不能更改(也不会自动更改)

我建议您使用VisualVM(或者像您的工具包这样的另一个内存分析器)来确定为什么您的应用程序使用了如此多的内存


使用JDBC时的一个常见错误是没有关闭资源。不幸的是,除非您这样做,否则它们使用的内存不会自动清理。

您是否每次都重新启动程序?此外,发布一些代码将有助于我每次都尝试重新启动程序。我现在已经添加了使用的代码。您是否尝试过关闭每次调用queryDB()时创建的那两条语句?另外,如果没有任何东西使用它,为什么要返回结果集?返回的结果集是一个错误,在前面更改了代码,但没有更改它。我还没有关上,我现在试试看会发生什么不客气。当您努力提高代码性能时,您可能需要考虑将DOM从XML解析转换为更快更薄的SAX或STAX;我已经提出了我认为相关的方法。我不是一个优秀的java程序员,所以代码中可能有一些东西,但我不知道为什么或者为什么where@user1892574:我将从关闭数据库资源开始。