2011-04-27 66 views
2

我正在实现一个用于android应用程序的缓存系统,我需要添加一个参数来指定为缓存而准备的最大内存量,但我不知道如何计算用于对象的内存。如何计算对象的内存使用情况?

+1

可能重复[在Java中,什么是确定对象的大小的最佳方式?](http://stackoverflow.com/questions/52353/in-java什么是最好的方式来确定大小的对象) – ZoogieZork 2011-04-27 19:03:47

回答

-1

这取决于对象。计算对象分配给对象可以达到的最大大小的基线时,对象的每个部分占用多少内存。

+0

考虑提供一个如何做到这一点的例子。 – 2011-04-28 17:44:30

0

您可以考虑购买的应用程序的堆转储并观察其保留堆

+0

要生成堆转储,请使用heapViewer(自JDK5.0起)。它位于%JDK_HOME%\ demo \ jvmti \ heapViewer中您可以使用-agentlib选项从命令行启动该功能。您可以使用Ctrl-C或Ctrl- \(SIGQUIT)触发转储。 – 2011-04-28 17:40:23

1

显然1.5添加了一个设备接口。看看这篇文章

http://www.javapractices.com/topic/TopicAction.do?Id=83

你可以使用一个getObjectSize()方法。它的实现具体和近似,但好于没有

+2

这是一个不错的选择,但不适用于android:'( “java.lang.instrument包已从dalvik核心库中删除, ,因为此包基本假设虚拟机使用的执行格式为 是.class文件.class文件根本不会出现在Android上。“http://groups.google.com/group/android-developers/browse_thread/thread/311e16daba10dd7c – luisZavaleta 2011-04-27 19:33:05

+0

检查这篇文章http://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to-determine-the-size-of-a-object其中一个人说可能有一个类似C的sizeOf() – nsfyn55 2011-04-27 20:26:19

+1

sizeOf使用内部java.lang.instrument http://www.google.com/codesearch/p?hl=zh-CN#JJilFFvKD1Y/trunk/Java/%E4%BE%8B%E5%AD%90/SizeOf/src/净/ sourceforge的/的sizeof/SizeOf.java&q = NE t.sourceforge.sizeof.SizeOf&d = 8 – luisZavaleta 2011-04-28 00:29:26