【问题标题】:most common cause of OutOfMemory errors when using Hibernate?使用 Hibernate 时 OutOfMemory 错误的最常见原因是什么?
【发布时间】:2010-10-13 04:59:42
【问题描述】:

请原谅新手的问题。

我的数据模型非常简单(两个表;一个有 200 行,另一个有 10,000 行;两者之间的自然连接)。

我正在使用 Hibernate 尝试对这些表进行简单的读取/更新。 这样做会不断抛出 OutOfMemory 错误(1GB 分配给我的 JVM)。

由于自然内存需求,这似乎不太可能,更有可能是我在 Hibernate 中省略了一些基本步骤。

我什至已经用直接 SQL 替换了大部分实际的 Hibernate 对象访问(荒谬,我知道)。但即使是 getCurrentSession().createSQLQuery(...) 也会导致 OOM 错误。

谁能指出我正确的方向?

【问题讨论】:

    标签: java hibernate orm


    【解决方案1】:

    使用 Hibernate 时 OutOfMemory 错误的最常见原因是什么?

    OOM 的一个常见原因是缺乏对会话级缓存大小的控制(通过定期调用 session 上的 flushclear,理想情况下,与 JDBC 批处理相同的时间间隔大小)在处理大量实体时。有关更多信息,请参阅Chapter 13. Batch processing

    但你的情况并不那么令人印象深刻。你到底在做什么?以及如何(即使是伪代码也有帮助)?

    【讨论】:

    • 我根本没有调用 clear(),哈哈。我去看看,谢谢。
    • @Aaron 请注意,大多数时候,您不需要像这样“微观管理”会话。这仅在您开始处理大量实体时才有用(这就是为什么我想了解有关您的确切场景的一些细节)。但是文档会给你一个想法。
    • 代码太大,无法发布。我可以以某种方式直接将您发送给您吗?
    • @Aaron 我更喜欢用伪代码进行一些解释。您可以随时尝试将其发布到pastebin.com,我可能会看看。但我不保证任何事情。
    • 这有帮助吗?我的会话在实体计数和集合计数方面稳步增加。废话:4,717 个实体,158 个集合。已使用 793MB。也许这不是刷新/缓存问题,我只是坚持 Hibernate 对象引用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    相关资源
    最近更新 更多