2014-01-30 39 views
1

情況下,這似乎並沒有返回從NetBeans中的任何結果(其中有同一個堆分析工具,VisualVM的):OQL找到實現的java.security.Principal

select x.name from java.security.Principal x 

查詢工作,如果我把實現Principal的具體類的名稱,但我需要所有的實現。

在Eclipse Memory Analyzer中嘗試了相同的結果。

任何線索?

回答

2

堆轉儲不具有哪些類實現特定接口的信息。堆轉儲中唯一可用的信息是關於超類的。 NetBeans Profiler可以克服這個缺點 - 如果您使用堆轉儲,在分析或監視NetBeans項目時,它可以計算實現項目特定接口的類。

+0

謝謝。那麼,如何問Netbeans呢? – ymajoros

+1

只需在NetBeans中打開您的項目並調用Profile Project。您只能使用Monitoring模式,一旦啓動應用程序,就可以進行堆轉儲。 –

+0

好的,在你的解決方案中錯過了「Profiler」這個詞。那麼,不,這些是生產堆轉儲,我無法分析這些服務器。不管怎麼說,還是要謝謝你。 – ymajoros

0

JHAT OQL 'instanceof' operator does not work with interface types BUG封閉,不會解決因爲當前堆轉儲格式有沒有這樣的信息。主要有:

BT2:解決

(例如通過JAR文件 搜索)的手動查找堆中快照所有可用的實現類。除了難度和尋找所有可能的IMPL類的不可靠的,因爲你不得不要麼

  1. 運行的每一個實現類單獨OQL查詢 結果不會很理想,很難看到所有結果在一個 的地方。

  • 使用「從物體O」和通過檢查類型,這很可能是 過於緩慢,因爲這將遍歷中的每個對象來過濾結果堆。
  • 如果您對類名或包,你可以使用這樣的查詢來尋找合適的人選了一些猜測:

    filter(heap.classes(), "/org\\.hibernate\\.cfg\\.naming/(it.name)") 
    

    您可以通過保存的搜索結果:

    x = toArray(filter(..., ...)) 
    

    然後查詢詳細信息而無需等待原始查詢:

    map(x, "{cl: it, sub: it.subclasses(), sup: it.superclasses()}") 
    
    相關問題