【发布时间】:2013-12-21 16:33:41
【问题描述】:
我在 Tomcat 中有一个 Web 应用程序,我在其中执行许多字符串操作(子字符串、索引、修剪等)。我用 jmap 做了一个堆转储,然后用 VisualVM 加载了它,我意识到我的堆内存使用量的近 50% 是用 char[], 为什么 char[] 占用了内存?我应该担心吗?它与字符串池有关吗?
【问题讨论】:
-
我们能看到一些代码吗?看起来您正在使用大量字符串 - 您是否检查了
gc()之后的结果? -
这样的事情: return tiempo.replace("años", "").replace("año", "") .replace("meses", "").replace("mes" , "") .replace("semanas", "").replace("semana", "") .replace("dias", "").replace("dia", "").trim();
-
@NestorHernandezLoli 这将创建许多立即超出范围的临时对象。那里没有内存泄漏,垃圾收集器还没有清理它们。
-
@NestorHernandezLoli 从截图中我们可以看到你有很多哈希映射条目。您是否将字符串存储到地图中?
-
@Andrey Chaschev,不,对于这个类,我没有使用 HashMaps 来保存字符串
标签: java performance tomcat memory-leaks