上周末我打电话给客户,告诉我他们的
Java程序在导入数据时没有响应.数据是一个简单的Excel工作簿,包含4个工作表.正在从列中读取所有数据并将其添加到数据库中.
所以我开始调查并得到了一些奇怪的结果.
>使用Run in Netbeans测试导入.这使用Java 64位实例:
第一次运行
第二次运行
>使用Java Web start测试导入.这是通过打开JNLP文件并使用Java 32位实例启动的:
第一次运行
在这种情况下,我遇到了客户报告的相同问题,程序在经过一段时间的导入过程后停止响应.这是因为我达到了最大堆大小(据我所知)(红色圆圈).
第二次运行
所以我决定通过在JNLP文件中添加以下内容来增加初始堆大小和最大堆大小:initial-heap-size =“512m”max-heap-size =“1024m”.当我再次测试导入时,它似乎工作,但是我注意到与前两种情况相比,使用的内存要多得多:
>为什么案例1和案例2之间的内存使用量相差300mb?
>这种高内存使用是编程错误还是内存泄漏的结果?或者拥有如此高的价值是否正常?
>为此问题添加initial-heap-size =“512m”max-heap-size =“1024m”是否是有效的解决方案?