2010-01-25 94 views
3

有什麼辦法可以知道某個類的實例調用了其成員方法的次數。如何知道在java中調用特定方法的次數

我認爲(不確定),一種方法是爲方法有一個專用的成員變量,但如果我們有這麼多的方法,這將是不可行的。

例如:

class A{ 
     public void someMethod(){ 
     } 
} 

和我有一個實例說

A a = new A(); 

所以我想知道的時候a數在程序中援引someMethod。 我們可以有任何數量的方法。

+3

嘿gurukulki,每次發佈代碼片段時,格式都很差,幾乎沒有一個實際編譯。請注意這一點:) Intenting要用4個空格完成,'Class'要寫成'class'。 – BalusC 2010-01-25 12:56:10

+0

對不起BalusC。這只是我正在尋找的一個例子。沒有編譯。我將來會照顧它。謝謝 – GuruKulki 2010-01-25 12:58:50

+0

BalusC:爲什麼意向是用4個空格完成的?我使用tab來識別。是否有正當理由鍵入鍵盤4倍而不是1倍? – newbie 2011-01-24 13:21:47

回答

5

如果您在程序內部需要此信息,這正是面向方面編程的意義所在。使用AspectJ,這將是非常容易的。 Spring AOP可能也會起作用。

+0

如果spring AOP方法調用它的內部方法或者可能性,該怎麼辦? – newbie 2011-01-24 13:31:22

2

您可以考慮使用分析器,例如,一個來自NetBeans或YourKit等。

+0

你能否詳細說明。我不明白 – GuruKulki 2010-01-25 12:55:03

+1

@gurukulki:http://java-source.net/open-source/profilers使用探查器,您可以在每個類/方法/變量/內存使用情況下分析並獲取統計信息。 – BalusC 2010-01-25 12:57:07

4

有你可以採取一些方法,這取決於你如何輕鬆地修改代碼:

  • 只需添加計數器變量按照你的建議;笨拙如果你必須在很多地方添加它,但易於編碼
  • 把你的計數器代碼放在其他工具類中,用你從所有相關位置調用的單一方法「爲此方法增加計數器」;所討論的效用方法然後檢查調用堆棧 - 例如,通過(new Exception())。getStackTrace() - 查看誰在呼叫並增加相關計數器
  • 使用提供此設備的分析器
  • 使用ASM庫添加計數器。
  • 使用Java工具框架在加載類時即時修改相關方法的類定義;這可能是最靈活的 - 你甚至可以使用你自己沒有寫過,也不能修改的代碼,這意味着你不必修改你想要執行的實際類的代碼, - 但它是迄今爲止最複雜的代碼。
1

還有很多Open Source Java Profilers

分析器執行動態程序分析(與靜態代碼分析相反),並顯示程序的行爲,在程序執行時收集信息。其中一些分析器顯示方法調用統計信息。

1

如果您有權訪問JProbe它會告訴您一個方法被特定實例調用的次數。

他們說MAT也不錯,它的免費,我還沒試過呢。

1

它可能與java.lang.reflect.Proxy類有關。在Horstmann的書「Core Java」中。第一卷'這一技術在詳細描述中。

相關問題