如何衡量数据结构的内存使用情况?

时间:2014-03-31 18:53:18

标签: java trie

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

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

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

请您就此分享一些想法吗?非常感谢。

2 个答案:

答案 0 :(得分:1)

简短的回答是:你不能。 答案很长:您可以通过重复在测试之前和之后多次调用GC的差分内存分析来计算内存中对象的大小。但即使这样,只有非常大的数字或圆形才能接近实际尺寸。你首先需要一个预热阶段,即使所有接缝都顺利工作,你也可能会遇到jit和其他优化问题,你不知道。

一般来说,计算你使用的物体数量是一个很好的经验法则。

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

如果您有大量数据,地图可能因碰撞而变慢。

一种常见的方法是在需要优化的情况下稍后进行优化。

答案 1 :(得分:0)

你有没有试过" jps" Oracle在Java SDK中提供的工具?您可以在JavaSDK / bin文件夹中找到它。它是性能检查甚至内存使用的绝佳工具。