如何有效地确定内存中的java对象大小?

时间:2012-01-23 16:06:47

标签: java memory object lru

我正在使用lru缓存,它限制了内存使用量。 lru缓存包括两个数据结构:hashmap和链表。哈希映射保存缓存对象,链表保留缓存对象访问顺序的记录。为了确定java对象的内存使用情况,我使用了一个开源工具 - Classmexer代理  这是http://www.javamex.com/classmexer/上的一个简单的Java检测代理。

我在http://sizeof.sourceforge.net/尝试另一个名为SizeOf的工具。

问题是性能非常昂贵。测量物体尺寸的一次操作的时间成本约为1.3秒,这非常非常慢。这可以使缓存的好处为零。

还有其他解决方案来测量java对象的内存大小吗?

感谢。

3 个答案:

答案 0 :(得分:1)

获得准确的字节值将是昂贵的,因为它需要使用反射来获得嵌套大小,但它可以完成。

In Java, what is the best way to determine the size of an object?

http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html

答案 1 :(得分:0)

看看这个:How to calculate the memory usage of a Java array也许它可以帮助你进行分析。

答案 2 :(得分:0)

既然你已经拥有了一个可以做到这一点的工具......现实情况是,在Java中没有快速的方法。