我想减少内存中的对象数量。可能有许多具有相同值的对象。有没有办法找出堆转储中具有相同值的所有对象。
最佳答案
I want to reduce number of objects in memory. There may be many objects having same values.
我假设您的长期目标是通过仅保留具有相同值的对象的一个副本来让您的应用程序节省内存。
这个想法的问题是您通常需要构建/维护一个额外的数据结构,以便您可以找到具有相同值的先前对象。例如,一个 HashMap。 (像 Guava interner 这样的现成解决方案在引擎盖下是相同的。)如果你不小心,这个数据结构可能会使用比你通过消除重复项节省的内存更多的内存。
此外,它没有正确实现,“驻留”数据结构可能会通过阻止对象被垃圾收集来有效地泄漏内存。内存泄漏问题的解决方案都涉及在某种程度上使用 WeakReferences 等。这意味着更多的对象和更慢的垃圾收集。后者是因为 1) GC 需要跟踪 interned 对象,2) interned 对象往往生命周期更长,更有可能在老年代结束,以及 3) WeakReference 实例对于 GC 来说相对昂贵处理。
总而言之,注意不要让内存力问题变得更糟!
关于java - 在堆转储中查找具有相同值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3245312/