【问题标题】:How to determine the actual memory usage of a data structure如何确定数据结构的实际内存使用情况
【发布时间】:2011-04-30 11:40:08
【问题描述】:

在数据结构中,我知道结构的大小取决于从一个部分到另一个部分的内部链接。除了 JProfiler 之外,还有什么方法可以准确判断特定结构中占用了多少内存?

例如,本学期的课程项目涉及将各种结构应用于歌曲数据库。这些项目涵盖了数组、列表、展开列表和树。我想做的是查看使用了多少内存。例如,一个链表需要 3N 的内存,但我想看看一个节点在我的项目中占用了多少空间。

JProfiler 看起来可以,但 500 美元超出了我的价格范围,我想将它用于本学期涵盖的所有结构,而不是目前应用的三个结构。

【问题讨论】:

    标签: java data-structures memory-management


    【解决方案1】:

    使用VisualVM。它随 JDK 一起提供,允许您拍摄堆的快照。

    【讨论】:

    • 谢谢,这看起来像我要找的。​​span>
    • 我相信您在结尾处留下了一两个字
    【解决方案2】:

    最准确的方法可能是使用分析器 - 使用 Google 查找免费的。

    或者,您可以在Do you know your data size? 中尝试该技术。

    【讨论】:

      【解决方案3】:

      老实说,我以前从未使用过这个,但是getObjectSize 方法是Instrumentation 接口的一部分,它可以在没有第三方应用程序的情况下提供您想要的答案。正如 Amir 所建议的那样,它可能没有 VisualVM 更容易,但阅读它并没有什么坏处。

      【讨论】:

        【解决方案4】:

        使用 System.getRuntime().freeMemory()。

        运行垃圾收集器;检查空闲内存;创建您的对象之一;检查空闲内存;减去。

        【讨论】:

        • 根据垃圾收集的工作方式,不能保证这将产生一个对象大小的有效数量。并不是说它不会,只是永远存在的可能性是它会给你一些错误的价值。
        • 当然,不能保证,但我从未听说过它在实践中会失败。你有吗?
        • 从 Java 8 开始,它实际上是 Runtime.getRuntime()... 可能与早期版本不同 (?)。
        最近更新 更多