我想执行 OQL 查询 https://htmlpreview.github.io/?https://raw.githubusercontent.com/visualvm/visualvm.java.net.backup/master/www/oqlhelp.html在 VisualVM (v1.4.4) 中检索对象的(非静态)字段名称。
OQL 文档描述了heap.findClass(className)
。这将返回一个对象,其中包括fields
属性(字段名称数组)。
当我执行以下 OQL 时...
heap.findClass('java.io.ByteArrayInputStream').fields;
...它返回一个包含 4 个字段对象的数组 (ByteArrayInputStream
有 4 个字段 https://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayInputStream.html - buf
, count
, mark
, and pos
- 我假设这些是正在返回的内容):
org.netbeans.lib.profiler.heap.HprofField@56de8c
org.netbeans.lib.profiler.heap.HprofField@56de95
org.netbeans.lib.profiler.heap.HprofField@56de9e
org.netbeans.lib.profiler.heap.HprofField@56dea7
如果我然后尝试操作这个数组,例如访问每个字段的name
and signature
属性(如 OQL 文档中所述),我没有得到任何结果。我什至无法获得数组的长度。例如:
heap.findClass('java.io.ByteArrayInputStream').fields.length;
and:
heap.findClass('java.io.ByteArrayInputStream').fields[0];
上面两个语句都返回<no results>
.
我究竟做错了什么?可能是一些基本的东西。我不太熟悉 JavaScript,也不熟悉 VisualVM 中数据的显示方式。