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

时间:2013-01-03 16:09:43

标签: java mysql heap

我编写了一个Java程序,它通过mysql数据库进行解析并分配值。我第一次在数据库中的特定表上运行此程序时运行正常并完成。我试图在不同的表上运行它多次,它只是在堆空间不足。无论如何,堆空间正在减少?感觉好像程序运行的时间比以前短得多。这个程序的文件并不比它第一次运行时的文件大。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

我建议您使用VisualVM(或其他内存分析器,如YourKit)来确定应用程序使用尽可能多的内存的原因。

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