我编写了一个 Java 程序,它解析 mysql 数据库并分配值。我第一次在数据库中的特定表上运行该程序时,它运行良好并完成了。我试图在不同的表上运行它更多次,但它只是堆空间不足。无论如何,堆空间正在减少吗?感觉现在程序运行的时间比以前短了很多。该程序的文件并不比第一次运行时大。
user1892574
问问题
112 次
2 回答
0
这意味着您的程序中可能存在内存泄漏。您加载的某些对象没有被 GC,这减少了新对象的可用堆空间。
您可能没有一些静态引用(或)数据库连接没有关闭,如果没有看到一些代码就很难猜到。
于 2013-01-03T16:11:38.413 回答
0
如果发生内存泄漏,可用空间量可能会减少。最大堆空间是固定的,一旦程序启动就无法更改(也不会自动更改)
我建议您使用 VisualVM(或其他内存分析器,如 YourKit)来确定您的应用程序使用尽可能多的内存的原因。
使用 JDBC 时的一个常见错误是没有关闭资源。不幸的是,除非您这样做,否则他们使用的内存不会自动清理。
于 2013-01-03T16:12:27.377 回答