2011-04-27 64 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