我想减少内存中的对象数。可能有许多对象具有相同的值。有没有办法找出所有在堆转储中具有相同值的对象。在堆转储中查找具有相同值的对象
1
A
回答
1
使用分析器。我可以说YourKit有这个功能。
2
我想减少内存中的对象数量。可能有许多对象具有相同的值。
我假设你的长期目标是让你的应用程序只保留一个具有相同值的对象的副本来节省内存。
这个想法的问题是您通常需要构建/维护额外的数据结构,以便您可以找到具有相同值的以前的对象。例如,一个HashMap。 (像Guava interner这样的现成解决方案是相同的。)如果你不小心,这个数据结构可能使用更多的内存,而不是通过消除重复项来节省内存。
此外,它没有正确实施,“实习”数据结构可能会通过防止对象被垃圾收集来有效泄漏内存。内存泄漏问题的解决方案都涉及在某个级别使用WeakReferences等。这意味着更多的对象和更慢的垃圾收集。后者是因为1)需要由GC跟踪被拦截的对象,2)被拦截的对象倾向于寿命更长,并且更有可能最终在老一代中,以及3)WeakReference实例对于GC而言相对昂贵处理。
总之,注意不要让你的记忆问题变得更糟!
0
查看方法Integer.valueOf(int i)
的Sun/Oracle Java实现。它已经有一个预定义的常用值缓存(从-128到127),因此在为这些值调用该方法时不会创建新实例。
这表明,如果您在创建对象时非常小心,那么您可以保留内存占用空间。也许你应该调查你的对象是如何创建的,并尝试在创建时缓存它们。也许通过查看流行的用例,或者应用程序行为方式的一些分析。这将取决于应用程序,并且对于您将有一个开箱即用的解决方案存在怀疑。我相信这会为你节省一些长期的努力,而不是试图解决目前占用太多空间的问题。
相关问题
- 1. 在NSMutableSet中查找具有相同属性值的对象
- 2. 在具有相同键的javascript对象中存储值
- 3. 查找对象的数组对象具有相同的ID
- 4. 在jvm堆转储中查找键值对的内容?
- 5. 在具有相同值的对象中合并JavaScript对象
- 6. 在列表中查找某些属性具有相同值的对象
- 7. OQL仅用于在堆转储中查找新对象?
- 8. Python:对象具有相同的值?
- 9. 查找对象集合中的数据,其中对象中的所有名称都具有相同的值
- 10. 查找具有相同值的行在不同列中的行对
- 11. 在JSON对象中查找具体值
- 12. 比较具有相同值的非相同对象
- 13. 如何在DataGridView中查找具有相同值的单元格?
- 14. 查找在另一列中具有相同值的行 - Python
- 15. 在MySQL列中查找具有相同值的行
- 16. 在多列中查找具有相同值的行
- 17. 如何查找在Solr中具有相同值的两列
- 18. 查找具有相同的最高值的所有键在Python
- 19. 查找对象集合是否具有给定属性的相同值
- 20. 合并具有相同ID但对象总值的对象
- 21. arraylist中的所有对象都具有相同的值
- 22. 存储对象具有相同的@Id值但是独特的父母值?
- 23. 在堆转储比较中找不到对象
- 24. 在Postgresql中查找具有JSON值最高的对象
- 25. 存储阵列具有相同的值
- 26. 使用python查找具有相同起始字符的数组中的对象
- 27. 查找对象图中具有相同键的实体,以防止“ObjectStateManager中已存在具有相同键的对象”错误
- 28. SQL - 查找具有相同值的不同名称
- 29. 如何从java堆转储中找到缓存的对象
- 30. Java - 对象列表。在字段中查找具有特定值的对象
我在他们的网站上看不到任何提及,只有内存中的字符串和数组(仅)的文本搜索功能。如果我理解正确,这个特性将依赖于一个与探查器集成的interner。 – finnw 2010-07-14 14:02:48