【问题标题】:many domains = much memory usage?许多域=大量内存使用?
【发布时间】:2009-07-20 17:10:04
【问题描述】:

我想知道,例如,我的项目中有大约 80 个域,这是否意味着这 80 个域将在我运行项目时加载到内存中,或者在我需要该域时加载.. .

如果我在一个项目中有多个域,我必须禁用自动编译并增加 perm gen 空间。

当我需要访问这些域时,是否有任何解决方案可以加载? 并非所有域都会被使用...有时它只是一个小域,用户几乎从未接触过以防万一发生某些事情(即特殊情况)

我目前正在使用 grails 1.1.1,并且必须禁用域的自动编译,否则它将卡住并耗尽内存/内存生成空间

【问题讨论】:

    标签: hibernate grails


    【解决方案1】:

    Grails 由 Hibernate 提供支持,而 Hibernate 确实需要在启动时加载配置中的每个域类,因此不会只加载域的一部分。

    增加 PermGen 是一件很正常的事情,尤其是在开发中,因为默认值只有 64mb,并且当 grails 重新编译内容并重新启动应用程序时,类文件不会轻易卸载。

    在从 war 文件运行时,您是否观察到类似的内存使用情况?

    【讨论】:

    • 还没有。我已将我的 perm gen 空间增加到 300MB 并禁用自动编译,因此当我在域上添加某些内容/更改时,我必须重新启动 grails。顺便说一句,为什么 Hibernate 需要在开始时加载所有内容? java在启动应用程序时是否也会加载所有类?
    • 它处于休眠状态,它必须加载所有域类,以便它可以验证配置并预先生成它可能需要的任何代理
    【解决方案2】:

    你在开发模式下运行时遇到这个问题吗?如果是这样,您总是可以尝试将您的开发模式数据源从内存中的 HSQLDB 数据库更改为基于文件的 HSQLDB 数据库。您可以在 grails-app/conf/DataSource.groovy 中找到您需要编辑的文件

    【讨论】:

    • 我正在使用 mysql,我确实在开发模式下运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2012-01-13
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多