[英]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.