1

介绍:

我正在开发一个 Web 应用程序 (Grails) 并且有一个 XML 操作(上传和导入 > 20MB 文件),该操作具有巨大的内存消耗,在我的生产环境中导致 OutOfMemoryExceptions。

所以我想比较一下 XMLSlurper/XMLParser/ XmlTwig的内存消耗(老实说我懒得为我的 DOM 写一个 SAX 解析器)

我想知道的:

我缺乏一个好主意如何在非生产环境(普通的 groovy 而不是 grails 环境)中开始一些批处理执行。我想多次测试不同的实现,测量内存消耗(可能还有 cpu 时间)并显示平均值。我的生产环境的内存设置如何设置也可能很重要(-XX:MaxPermSize,...,在 Tomcat 上),改变它也会很好。

有没有人知道如何做到这一点?

4

1 回答 1

0

这是一个很难直接回答的问题。但是我来了...

对 URL 使用 DOM 解析器或类似 Groovy 的 XMLSlurper 应该可以解决问题(或者将文件上传到服务器,然后使用 XMLSlurper)。每当您处理大文件时,您确实希望避免将整个文件加载到内存中然后对其进行处理,看起来您理解为什么会这样。比较每个实现似乎有点矫枉过正,所以只需选择一个您信任的不会预先将所有内容加载到内存中的实现。

另外,就tomcat的jvm设置而言,您应该在合理范围内利用可用的硬件...... 在需要更多内存才能有效运行的 Java 环境中尤其如此,因此最大限度地设置设置 (-Xmx2048m -Xms2048m -XX:MaxPermSize=256m)。

于 2013-02-01T13:22:56.933 回答