回答
您可以使用類似Runtime.getRuntime().totalMemory()
及其對應文件Runtime.getRuntime().freeMemory()
的內容來獲得有根據的猜測,但這並不包含在調用之間GC'ed的對象。
謝謝。好吧,它不是100%準確的,但易於實施。 – magallanes 2011-01-19 20:16:44
如果你知道對象的內容分佈,你可以蠻力計算它。
但是,我能想到的最精確的方法是在剖析器中查看它。這裏有免費的工具,有些是JDK提供的。不過,我用過的最好的工具是Yourkit。這並不意味着它是唯一的解決方案,只是我的最愛。
jmap足夠好而且免費:) – bestsss 2011-01-19 19:54:03
這是java.util.ArrayList乘以參考大小(4 bytes on 32bit, 8bytes on 64bit) + [Object header + one int and one references]
的容量。
的容量比大小不同(always >=)
但你想「時間相等,稱之爲trimToSize()
技術上來說ArrayList
有Object[]
它存儲的數據。
這是一個內存分析器的用途。它會告訴你你的平臺。空ArrayList的最小大小是64字節。很有可能你不需要知道這些,除非你有100K或更多的元素。
ArrayList的工作方式是它只包含一個特定大小的數組(可以在構造函數中指定,我相信10是默認值?)。只要內部數組的元素數量過大,內部數組的大小就會增加一倍。所以你需要將對象的大小乘以內部數組的大小。
您可能需要使用Netbeans中可用的profiler,它會告訴您我們程序的內存消耗,並且可以爲您提供有關每個對象的一些詳細信息。
答案是,這取決於你如何衡量。如果你問我ArrayList的大小,我會給你淺的大小。也就是說,一個ArrayList由一個引用數組和一個指示包含元素數的整數組成。如果你想知道它的大小,那簡直就是4 + * array.length。
如果你想知道ArrayList的大小和所有包含的元素,那麼有一些堆分析器可以解決這個問題。我相信YourKit就是其中之一。
java的內存使用情況取決於JVM實現。確定我知道的實例的內存使用情況的唯一真正方法是使用Java代理。有一點tutorial這樣做。
- 1. NSMutableArray的大小(內存)是多少?
- 2. Java中Character(char)的大小是多少?
- 3. amazon ec2實例中的緩存內存大小是多少?
- 4. 數字的大小(在內存中)是多少?
- 5. Arraylist ArrayList的Java大小
- 6. 我的CUDA紋理內存的大小是多少?
- 7. 如果物理內存的大小是2^32-1,那麼虛擬內存的大小是多少?
- 8. char []的大小是多少?
- 9. RLMInt的大小是多少?
- 10. Clojure關鍵字的內存大小是多少?
- 11. 複製時使用的理想內存塊大小是多少?
- 12. 減少內存中的圖像大小
- 13. Linux內核的虛擬內存大小佔用48GB內存,64位機器的大小是多少?
- 14. Java中String對象的最大大小是多少?
- 15. Java 8中默認的最大Codecache大小是多少?
- 16. Java的ArrayList的大小
- 17. arraylist set(int x,string item)那麼大小是多少?
- 18. Linux中Ready Queue的大小是多少?
- 19. Hyperledger v0.6中塊的大小是多少?
- 20. C++中指針的大小是多少?
- 21. Seam中的會話大小是多少?
- 22. VC++中棧的大小是多少?
- 23. UNIX中的頁面大小是多少?
- 24. 爲.NET應用程序分配的最大內存大小是多少?
- 25. Java中Float的最大值是多少?
- 26. 減少Lucene索引的內存大小
- 27. 如何減少我的ArrayList的大小?
- 28. java中引用變量的大小是多少
- 29. java中散列表桶的大小是多少?
- 30. WinRT隔離存儲的最大大小(MB)是多少?
請參閱http://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to-determine-the-size-of-an-object – 2011-01-19 19:54:59