2012-09-06 54 views
4

我有一個對象HEAP轉儲可用與我通過Jmap.I也看到轉儲通過Jhat,但我需要計算的對象的大小。我該如何做到這一點。JAVA:需要計算對象大小(堆轉儲可用)

在轉儲我可以看到:對於實施例

類名稱,總的目的,總大小

com.test.app.CallRecord,2194,446324

所以如果我計算446324/2194 = 203.So 203個字節是1個CallRecord對象的大小。是這樣嗎?我在這裏有一個困惑,這個大小是什麼。它包括引用的大小呢?

m困惑.....有人問我讓他知道CallRecord對象的大小。我應該告訴他203個字節。我懷疑它是否正確。

203個字節是否包含CallRecord對象下的引用大小。

如何計算。您的想法被要求。

在此先感謝。

回答

2

這取決於如果總數尺寸爲shalow尺寸或保留尺寸。

  1. 淺大小

    對象的淺大小是用於存儲對象本身的內存量。所引用的對象不被考慮在內。

  2. 保留大小

    對象的保留大小是當對象被垃圾收集器收集,可釋放的內存量。

+0

OK Thanks.Could請你讓我知道如何讓這兩個sizes.I搜索過網,發現OQL(對象查詢語言)。我已經嘗試過但不能成功。你能幫助我嗎? – VJS

+0

@VJS你可以用Eclipse MAT等工具獲得這些尺寸 – Benoit

2

我建議你使用某種內存分析工具(profiler)。 YourKit對此很好,但代價很高,Eclipse MAT也很好,而且免費。 VisualVM非常簡單,但它足夠好並且免費。(我經常結束使用所有這些,因爲它們都有一些其他缺乏的東西。)

+0

+1 Eclipse的MAT –