我有一個堆轉儲,我正在使用Eclipse MAT,但我認爲這應該通過visualvm或任何OQL客戶端工作。獲取OQL堆轉儲中類的靜態字段
我們可以做這樣的事情
select s.field1, s.field2 from org.me.MyClass
選擇一類的所有實例的領域......但是這僅限於成員變量,和類型的實例。
如何選擇沒有實例的類的靜態字段?
這與this other question有些相關。
我有一個堆轉儲,我正在使用Eclipse MAT,但我認爲這應該通過visualvm或任何OQL客戶端工作。獲取OQL堆轉儲中類的靜態字段
我們可以做這樣的事情
select s.field1, s.field2 from org.me.MyClass
選擇一類的所有實例的領域......但是這僅限於成員變量,和類型的實例。
如何選擇沒有實例的類的靜態字段?
這與this other question有些相關。
要訪問類的靜態字段 '道具' java.lang.System中您可以使用(在VisualVM的)
select heap.findClass("java.lang.System").statics.props
select heap.findClass("java.lang.System").props
這是一個有點hackish,但在MAT的工作原理:
SELECT c.SIZE
FROM INSTANCEOF java.lang.Class c
WHERE [email protected]("class java.lang.Integer ")
非常聰明,爲我工作,除了它也選擇內部類。我嘗試使用c。@ name,它在選擇列表中工作,但不在where子句中。在選擇列表中,「c」似乎是在where子句中的IClass(類的MAT表示),而它是java.lang.Class,它是如何工作的? – haridsv 2012-08-01 17:36:42
優秀, 謝謝。這兩個工作。 'select heap.findClass(「java.lang.System」)。statics'給出了從字段名到值的映射,這很方便。 – 2010-12-16 15:42:42
雖然這個問題沒有被要求,但值得注意的是,這不會在Eclipse MAT OQL中執行。 – 2010-12-16 15:49:58