8

我有一个用 Eclipse Memory Analyzer 打开的转储。

我想将堆的一些内容导出到文件中。

我感兴趣的字段之一是ArrayList,但我找不到以将数组列表的内容作为输出返回的方式查询转储的方法:

  • 选择 ArrayList 对象本身会返回如下内容: java.util.ArrayList [id=0xf2765680]

  • 在数组列表 ( select arr.elementData...) 中选择数组会返回如下内容: java.lang.Object[] [id=0xf2765698;length=4]

  • 当 arrayList 不为空时选择toString(arr)toString(arr.elementData)返回空字符串(null当它为空时为字符串)。

真的不可能吗??

4

2 回答 2

7

获取元素列表

SELECT OBJECTS arr.@referenceArray FROM OBJECTS <your_array_address> arr

重新映射数组元素列表

SELECT OBJECTS elem.<field_name> FROM OBJECTS (SELECT OBJECTS arr.@referenceArray FROM OBJECTS <your_array_address> arr) elem

真实例子

SELECT OBJECTS elem.callable.task.task FROM OBJECTS (SELECT OBJECTS arr.@referenceArray FROM OBJECTS 0x645eb6b80 arr) elem
于 2020-01-28T11:46:39.903 回答
0

我今天在数组中遇到了同样的问题。我找不到使用 OQL 的方法,但我确实找到了使用 Eclipse 内存分析器本身的方法。

  1. 选择要导出的数据的父对象。您的收藏现在应该显示在屏幕左侧的“属性”选项卡中。

  2. 右键单击 Attributes 列表中的集合,然后选择Copy-Save Value to FileCopy-Value

  3. 如果您选择Save Value to File,请指定文件位置。集合的内容将输出到文件中。

或者,似乎可以选择提取列表中的值。

  1. 右键单击列表。
  2. 选择Java 集合 - 提取列表值

我没有尝试过第二种选择,但我希望这对您或其他任何搜索此主题的人有所帮助。

于 2014-10-01T18:04:58.097 回答