繁体   English   中英

为什么我的Java堆有这么多char []

[英]Why my Java heap is with so many char[]

我在Tomcat中有一个Web应用程序,我在那里做很多String操作(substring,indexof,trimming等)。 我用jmap做了一个堆转储,然后用VisualVM加载它,我意识到我的堆内存使用量的近50%是用char [],为什么char []正在占用内存?我应该关注吗?它与字符串池有关吗? 在此输入图像描述

字符串在内部只是一个char []和一些额外的数据。 char []表示字符数组,换句话说,它是一个按字符保存字符串的数组。 如果你做了很多字符串处理,那么你的系统完全可能是带有char数组的fileld。

所以简而言之,没有什么可担心的,除非你的系统实际上使用了更多的内存,它应该是。 在这种情况下,您可以查看是否有一些文件结构未清除(哈希映射或相关)。

811k的char[]对应于800k的String ,所以是的,你有太多的字符串了。

如果你有内存泄漏(通过标记判断),那么它很可能是HashMap中的字符串。 你有800k个字符串实例,200k个哈希条目实例,30k个地图。 这可能意味着您的字符串保留在此缓存中并且不会被删除。 全局映射是内存泄漏的常见原因,需要确保它们从此缓存中被逐出。

由于所有这些值都不是GC编辑的,因此您可以尝试分析对象图,以查看使用JProfiler等工具保存它们的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM