gpt4 book ai didi

java - 如何测量数据结构的内存使用情况?

转载 作者:太空宇宙 更新时间:2023-11-04 06:55:38 25 4
gpt4 key购买 nike

我正在将 Trie 与存储英语单词的 HashMap 进行比较,超过 100 万个。数据加载后,只进行查找。我正在编写代码来测试速度和内存。速度似乎很容易测量,只需记录测试代码前后的系统时间即可。

如何测量对象的内存使用情况?在本例中,它要么是 Trie,要么是 HashMap。我观看了系统性能监视器并在Eclipse中进行了测试。启动我的测试程序后,操作系统性能监视器显示使用了超过 1G 的内存。我怀疑存储数据需要这么多内存。

此外,在我的 Windows 计算机上,它显示内存使用量在整个测试期间不断上升。这种情况不应该发生,因为数据的初始加载时间很短。之后,在查找短语期间,不应再有任何额外的内存消耗,因为没有创建新对象。在linux上,内存使用似乎更稳定,尽管也增加了一些。

您能就此分享一些想法吗?多谢。

最佳答案

简短的回答是:你不能。长答案是:您可以通过在测试前后多次重复调用 GC 的差异内存分析来计算内存中对象的大小。但即便如此,也只有非常大的数字或回合才能近似真实大小。您首先需要一个预热阶段,即使一切顺利,您也可能会陷入 jit 和其他优化的困境,而您却没有意识到。

一般来说,计算您使用的对象数量是一个很好的经验法则。

如果您的树实现使用对象作为表示数据的结构,则与映射相比,您的内存消耗很可能会很高。

如果数据量过多, map 可能会因冲突而变慢。

一种常见的方法是稍后进行优化,以防需要优化。

关于java - 如何测量数据结构的内存使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22769832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com