hibernate - Grails Controller (简单)代码占用太多内存。如何优化?

标签 hibernate grails out-of-memory

我有一个非常简单的域类和一个 Controller ,尽管运行时消耗了400MB以上的内存-需要一些优化建议。

基本上我有两个域类A和B,它们处于两个一对多的关系中(实际上,类B表示类A实例之间的多对多关系,-A的单个对象可以被多个B的对象引用如“fromA”和A的单个对象可以被多个B的对象称为“toA”(例如GORM文档以及航类和机场示例-A是机场,B是航类)。类A是一个非常简单的域类。

class A {
    static hasMany = [fromAs:B, toAs:B]
    static mappedBy = [fromAs:"fromA", toAs:"toA"]

    int ...
    String ...
    // several simple fields
}

B类也非常简单,它仅以两种方式引用A类。
class B {
    A fromA
    A toA

    int ...
    String ...
    // several simple fields
}

现在, Controller 要做的就是将所有可能的“航类”信息填充到数据库中。它也对int的设置做了一些非常小的计算,但是为了使代码清晰可见,我跳过了它。
A.list().each{ tempFromA ->
    A.list().each{ tempToA ->
        def b = new B()
            b.setFromA(tempFromA)
            b.setToA(tempToA)
            b.save(flush:false)
    }
}

这就是全部代码,它消耗了超过400MB的RAM。我尝试每插入1万条记录调用一次hiernateSession.flush(),但是总是在提交12万至30万条记录之后,出现内存不足的情况。

数据库中有610个A,因此嵌入式循环有超过370 000个周期(610x610)。

关于如何在内存消耗方面优化此代码的任何准则?它是如此简单的代码,以至于我在这里可能做的非常愚蠢……

最佳答案

this article by Ted Naleid中有一些非常好的GORM批处理性能提示。特别是,“Grails性能调整”部分可能会有所帮助。

关于hibernate - Grails Controller (简单)代码占用太多内存。如何优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14774799/

相关文章:

json - Grails 3.1 json 渲染

android - 位图内存泄漏 - Android

database - 大型只读数据库推荐缓存

Grails Command Object : How to load request. JSON 进去了吗?

java - LocalSessionFactoryBean 无法作为 SessionFactory 注入(inject)

json - Grails 获取子域对象

c# - 当需要处理大量内存集合时,有什么技巧可以减少内存消耗吗?

java - Spring Boot JPA ManyToMany 导致 OutOfMemoryError

hibernate - NHibernate - CreateSQLQuery 异常 "No persister for ..",为什么?

java - Hibernate Utils 无法在 JSP 页面中运行