我的应用程序在周末运行,并且在星期一我受到了Java heap space
例外的欢迎。
我分析了堆转储,发现有超过400,000个org.apache.derby.impl.store.raw.data.StoredRecordHeader
实例标记为无法访问的对象。
有谁知道这是否可以解释内存错误?
修改
在分析了一半的时间后,我不确定
StoredRecordHeader
实例负责 Java堆异常,但我不知道为什么会发生这种情况。
Derby中是否存在某种我不知道的缓存机制?
对于Derby来说,512MB最大RAM是否更少可以稳定工作?
我可以以某种方式修改derby缓存的最大大小吗?
答案 0 :(得分:1)
垃圾收集器应该删除无法访问的实例,这肯定不是OutOfMemoryError的原因。当您的应用程序包含太多对象时,会发生此错误,这些对象可以从GC根目录到达,因此GC无法将其丢弃。可以在此处找到更多信息:Plumbr encyclopaedia。
为了找到内存泄漏或任何内存耗尽情况的根本原因,使用某些专用工具通常要容易得多,例如Plumbr或Eclipse memory analyzer。