如何计算对象使用的RAM量?

时间:2011-03-17 14:34:51

标签: java memory map size hashmap

我有HashMap,其中包含1200万个条目。它将String值映射到Long值。每个字符串长约10个字符。是否有可能计算出这张地图在RAM中需要多少内存?

3 个答案:

答案 0 :(得分:1)

你可以猜测,你可以通过查看进入地图的每个项目的大小做出有根据的猜测,但是你最好的猜测是错误的。

JVM具有其他结构,用于跟踪引用并保存类的类型信息。这将增加一个固定但未知数量的内存,以准确(如果你能得出一个准确的输入估计)估计。

由于只有部分内存是直接保存数据的内存,而某些内存是用作保存数据的开销的内存,因此需要根据内存“增长”的预测来分析内存消耗。使用较小的地图时。

请注意,分析JVM是一项棘手的任务,因为它会以一种方式优化内存使用,这种方式将根据JVM运行的时间,Map的活动等呈现不同的结果。您需要进行统计抽样在各种条件下的投入;但是,赔率很高,你最终可以把手指放在一个合理的数字上。更重要的是,你也可以说“好吧它可能暂时达到这个数字的最高点,但平均应该稳定下来”。在静态分析中经常忽略对记忆的时间变化。

答案 1 :(得分:0)

JVM会知道,因为它必须分配和管理内存,但它没有告诉你。因此,没有原生,不,没有办法知道你的对象实际使用了多少内存。

答案 2 :(得分:0)

分析器会告诉您程序使用了多少内存,以及哪些对象正在使用什么内存。您可能能够找到对象的内存使用情况。

VisualVM包含在Java6中,它将为您提供此信息。

值得一提的是,这并不一定会给你一个内存'要求',只是看看它在那个时间点使用了多少内存。

相关问题