为什么char []存活了这么多代,我应该关注吗?

Rob*_*t H 17 java profiling garbage-collection netbeans

我是第一次在NetBeans中查看分析器,今天早上我注意到我通过Monitor分析器显示了超过1700个幸存的代,但是堆大小不变.在做一些阅读时,我发现这篇文章讨论了如何使用NetBeans探查器来发现泄漏.

因此,在关注文章建议后,我开始了一个内存分析器.在查看结果时,我发现char []占了大多数幸存的世代.目前,在这篇文章中,char []已经22代了.

现在一些帖子(OldCurmudgeon在底部附近评论)表明,如果我的堆稳定,没有泄漏,而其他人说,如果世代继续增长,那么.所以我有点困惑,哪个是对的.

所以,我的问题是:

根据以下屏幕截图,我应该进一步研究潜在的内存泄漏吗?

内存(堆) 内存(堆)

存储器(GC) 存储器(GC)

实时分配的对象 实时分配的对象

Pet*_*rey 8

char[]大概会举行String的对象.它们可以出于任何目的在任何地方创建,例如探查器和JMX使用它们,因此一个什么都不做的过程将显示这些(以及不断增长的堆)

注意:所有字符串文字和类等的名称将一直存在,直到卸载ClassLoader(这可以是程序的生命周期)

要确定您的堆使用量是否在增长,您应该查看完整GC后保留的数量.看看每次下降的底部,它对我来说都是一样的.其他信息对性能调优很有用,但本身并不是问题.

  • 我不能说我碰到过任何一个.我建议获得像YourKit这样的商业分析器的评估版,看看它有什么不同.例如,它不使用堆来完成它的工作,因此它确实在堆上创建了"噪音". (2认同)
  • 我建议分析简单的程序,在那里你可以理解它正在做的所有事情,看看它是如何查找CPU和内存分析的.这可以帮助您了解复杂的应用程序正在做什么(并知道要忽略什么,这相当多;) (2认同)