2012-05-29 114 views
2

需要建立我們自己的Java剖析。 CPU分析部分是在IBM構建您自己的分析器文章的幫助下完成的。現在也檢查類似的內存分析。在搜索發現Hprof,但它對我沒有用。我要的是一類內存分析器

對於例如,通過各種方法獲取以字節爲單位消耗的內存:

考慮一類test1test2類等是否有在Java文件

method1()存在於test1的

method2()存在於test2的

許多變數將每個方法 所以我想我內部聲明就像

TEST1 /方法1 = 12個字節(如果可能的話顯示跟蹤,即它是怎麼來像焦炭+整數等數這麼多的數量)

測試2 /方法2 = 18bytes

請幫助

+0

你純粹談論局部變量?或者關於在這些方法中創建的對象? –

+0

如果不詢問JVM本身,則無法執行此操作。您無法在JDK或Attach API中使用jvisualvm的任何特定原因? –

+0

'需要建立我們自己的Java profiler'你能解釋,爲什麼你覺得你需要做到這一點?這不是微不足道的,並且已經由商業分析師提供。 –

回答

1

如果你有興趣在一個給定的方法有多少內存佔用在棧上然後有two attributes in the class files,其中提供了這樣的信息:

max_locals告訴你爲局部變量保留了多少空間(以32位爲增量,即乘以4得到字節)。

max_stack告訴你操作數棧可這種方法的執行過程中成長爲最大。

如果您調用此方法,那麼添加這兩個將會給您一個粗略估計關於堆棧將增長多少。除了這些值之外,還會有額外的(可能是不變的)開銷,但這些應該是主要的可變因素。

你可以使用一個字節碼操作庫,如BCEL讀.class文件,並提取這些屬性。