簡體   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