您可能想要尝试设置此值以生成详细的堆转储,以向您显示发生了什么。
-XX:+ HeapDumpOnOutOfMemoryError
在2011年一个典型的 “小” Java桌面应用程序要与〜64-128MB运行。除非你有非常迫切的需求,否则我会首先将其设置为默认值(即不设置)。
如果你正在尝试做一些不同的事情(例如,在Android设备上运行),你将需要非常熟悉分析(并且你应该使用该标签发布)。
请记住,如果您要存储字符数据(Java在内部使用UCS-16),您的100条记录缓存(〜12个字节)可能(可能)是双倍。
RE:“不稳定”,JVM正在为您处理内存使用情况,并根据它选择的任何算法执行垃圾回收(这些年来这些算法已经发生了巨大变化)。图表可能只是工具和样本周期的人为因素。桌面应用程序的性能受到很多因素的影响。作为一个例子,我们曾经有过一次巨大的内存“泄漏”,只在一次自动化测试中出现,但从未出现在正常的实际使用情况中。原来测试中,鼠标悬停在一个工具提示上,其中包含打开文件的名称,而该文件又有一组引用返回到整个(巨大)项目。摆动鼠标几个像素摆脱了工具提示,这意味着所有的参考清理和垃圾收集器拿出垃圾。
故事的道德?您需要在内存不足时捕获确切的堆转储,并仔细检查它。
我使用100条记录(每条记录约12个字节)从数据库中获取数据,所以它始终使用恒定数量的内存来存储数据库中的数据 – maks 2011-04-05 18:04:55