java - 在堆转储中查找具有相同值的对象

标签 java performance heap-dump

我想减少内存中的对象数量。可能有许多具有相同值的对象。有没有办法找出堆转储中具有相同值的所有对象。

最佳答案

I want to reduce number of objects in memory. There may be many objects having same values.

我假设您的长期目标是通过仅保留具有相同值的对象的一个​​副本来让您的应用程序节省内存。

这个想法的问题是您通常需要构建/维护一个额外的数据结构,以便您可以找到具有相同值的先前对象。例如,一个 HashMap。 (像 Guava interner 这样的现成解决方案在引擎盖下是相同的。)如果你不小心,这个数据结构可能会使用比你通过消除重复项节省的内存更多的内存。

此外,它没有正确实现,“驻留”数据结构可能会通过阻止对象被垃圾收集来有效地泄漏内存。内存泄漏问题的解决方案都涉及在某种程度上使用 Wea​​kReferences 等。这意味着更多的对象和更慢的垃圾收集。后者是因为 1) GC 需要跟踪 interned 对象,2) interned 对象往往生命周期更长,更有可能在老年代结束,以及 3) WeakReference 实例对于 GC 来说相对昂贵处理。

总而言之,注意不要让内存力问题变得更糟!

关于java - 在堆转储中查找具有相同值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3245312/

相关文章:

java - 无法在不同线程中访问 SharedPreference 的值

java - 如何在运行集成测试时查看 H2 内存数据库?

java应用程序更新程序

linux - 比较物理硬件和基于 kvm 的虚拟机经历了奇怪的 rdtsc 行为

java - 在已经崩溃的系统上进行堆转储

java - JOGL 2.0 运行稳定的 JAR 文件?

performance - 迭代器中的 "Recycling"项以获得更好的性能

javascript - jQuery slideToggle() 性能不佳和/或卡住 IE8

java - 如何通过管道传输 JVM 堆转储

java - 垃圾回收频繁导致服务吞吐量低