情況下,這似乎並沒有返回從NetBeans中的任何結果(其中有同一個堆分析工具,VisualVM的):OQL找到實現的java.security.Principal
select x.name from java.security.Principal x
查詢工作,如果我把實現Principal的具體類的名稱,但我需要所有的實現。
在Eclipse Memory Analyzer中嘗試了相同的結果。
任何線索?
情況下,這似乎並沒有返回從NetBeans中的任何結果(其中有同一個堆分析工具,VisualVM的):OQL找到實現的java.security.Principal
select x.name from java.security.Principal x
查詢工作,如果我把實現Principal的具體類的名稱,但我需要所有的實現。
在Eclipse Memory Analyzer中嘗試了相同的結果。
任何線索?
堆轉儲不具有哪些類實現特定接口的信息。堆轉儲中唯一可用的信息是關於超類的。 NetBeans Profiler可以克服這個缺點 - 如果您使用堆轉儲,在分析或監視NetBeans項目時,它可以計算實現項目特定接口的類。
JHAT OQL 'instanceof' operator does not work with interface types BUG封閉,不會解決因爲當前堆轉儲格式有沒有這樣的信息。主要有:
BT2:解決
(例如通過JAR文件 搜索)的手動查找堆中快照所有可用的實現類。除了難度和尋找所有可能的IMPL類的不可靠的,因爲你不得不要麼
- 運行的每一個實現類單獨OQL查詢 結果不會很理想,很難看到所有結果在一個 的地方。
或
- 使用「從物體O」和通過檢查類型,這很可能是 過於緩慢,因爲這將遍歷中的每個對象來過濾結果堆。
如果您對類名或包,你可以使用這樣的查詢來尋找合適的人選了一些猜測:
filter(heap.classes(), "/org\\.hibernate\\.cfg\\.naming/(it.name)")
您可以通過保存的搜索結果:
x = toArray(filter(..., ...))
然後查詢詳細信息而無需等待原始查詢:
map(x, "{cl: it, sub: it.subclasses(), sup: it.superclasses()}")
謝謝。那麼,如何問Netbeans呢? – ymajoros
只需在NetBeans中打開您的項目並調用Profile Project。您只能使用Monitoring模式,一旦啓動應用程序,就可以進行堆轉儲。 –
好的,在你的解決方案中錯過了「Profiler」這個詞。那麼,不,這些是生產堆轉儲,我無法分析這些服務器。不管怎麼說,還是要謝謝你。 – ymajoros