8
A
回答
10
以問題字面上看,在大多數的JVM,在32位的JVM的所有引用採取4個字節,一個64位的JVM,參考需要8個字節除非-XX:+ UseCompressedOops已被使用,在這種情況下它需要4個字節。
我假設你問的是如何判斷一個對象佔用了多少空間。你可以使用Instrumentation(不是一件簡單的事情),但這隻會給你一個淺的深度。 Java傾向於闖入許多對象,而C++可能是一個單一的結構,所以它沒有那麼有用。
但是,如果你有內存問題,我建議你一個內存分析器。這將爲您提供淺層和深層空間物體的使用,併爲您提供整個系統的圖像。這通常更有用,因爲即使您已經開發Java十年以上,您也可以從最大的用戶開始並優化這些用戶,但只會猜測最佳優化位置在哪裏,除非您有硬數據。
如果不想使用分析器,獲取對象大小的另一種方法是分配一個大數組,並查看佔用了多少內存,您必須多次執行此操作才能獲得一個好主意,大小是。我會將年輕人的空間設置的很高,以避免GC導致您的結果混淆,例如-XX:NewSize=1g
2
如果您需要相當準確,請查看Instrumentation framework。
2
可以從JVM的不同而不同,但JVM說"Sizeof for Java"
你可能會記得「Java技巧130:你知道你的數據大小」描述了基於創建大量相同類實例並仔細測量JVM使用堆大小的結果增加的技術。在適用的情況下,這個想法非常有效,我將會用它來引導本文中的替代方法。
1
This one是我使用的一個。必須愛這些16字節的引用! alphaworks.ibm.heapanalyzer
相關問題
- 1. 如何在java字節碼中引用「this」對象
- 2. 空對象有多少個字節?
- 3. 如何檢測顯示對象中有多少個對象? (AS3)
- 4. 有多少內存用於Java對象中的函數引用?
- 5. 使用了多少個字節?
- 6. 使用dataReceived接收多少個字節?
- 7. 有多少個字節用於在Java中存儲布爾值?
- 8. 測試使用前弱引用在java
- 9. 如何使用ScalaTest測試Dao對象
- 10. 如何知道我的對象在C#中有多少個字節?
- 11. 如何確定有多少個字段一個對象被設置在Java中
- 12. 如何在多個測試中使用頁面對象的相同實例
- 13. Mongoose節點:如何在另一個對象中引用一個對象數組?
- 14. 如何通過多少個對象引用它來過濾對象?
- 15. 如何在NUnit測試對象之間使用持久對象?
- 16. 我可以測試是否存在另一個引用到java中的對象?
- 17. 如何在java中使用字節?
- 18. 如何測試對象字面在IE8
- 19. Java中的多線程,引用對象
- 20. 如何「反引用」 Java中的對象
- 21. 在單元測試中使用多少個線程?
- 22. 使用instanceof測試對象
- 23. 在Asp.net單元測試中缺少對System.Web.Mvc的引用?
- 24. Java:如何使用盡可能少的輸出字節將對象序列化爲字節數組?
- 25. \ n在文件中使用了多少個字節?
- 26. 在Java中,使用DefaultSelenium對象在selenium中開始測試,如何找到測試運行的瀏覽器?
- 27. Javascript對象多個引用
- 28. ZODB多個對象引用
- 29. 如何使用測試在ruby中運行多個測試用例:單元
- 30. 如何實現使用一個序多個節奏在java中
我只是猜測在這裏,但爲什麼不寫一個0字節的alloc'd程序,只是循環建立一個基線,然後分配100,000(100萬像需要)相同類型的objs 。大小的差異(可能)是一個合理的估計。歡迎Java大師來提出這個想法;-) – shellter 2011-04-02 02:43:16
@Shelter:對於現代的操作系統,JVM和GC來說,結果可能太細微而不實用。 – 2011-04-02 02:52:35
迄今爲止得到的答案似乎與對象大小有關。但是,您的問題明確指出了對象_reference_的大小。如果你確實在尋找參考大小,那麼請參閱http://stackoverflow.com/questions/981073/how-big-is-an-object-reference-in-java-and-precisely-what-information-does-it-it- CON – WhiteFang34 2011-04-02 05:56:50