现在,如果我想从堆转储中转储大字符串或char []。
我首先从heap analyzer
获取地址,然后使用
chars = heap.findObject("0x1111111")
var writer = new java.io.FileWriter("D:/temp/oql/chars.txt");
for (var i = 0; i < chars.length; i++) {
writer.write(chars[i]);
}
writer.close()
但这很烦人。
我需要使用两种工具来做一件事情,浪费时间和内存。
因此,如果我不想打开Heap analyzer
,我将使用:
filter(heap.objects('char[]'),
function(it, index) {
if (index == 710394) {
var writer = new java.io.FileWriter("D:/temp/oql/chars.txt");
for (var i = 0; i < it.length; i++) {
writer.write(it[i]);
}
writer.close();
return true;
}
return false;
})
但是当索引很大时,它的速度很慢。
我检查OQL以查看是否可以使用索引,但找不到。
因此,我可以通过VisualVM(如现在的索引)直接获取地址,还是通过其他任何简单转储到磁盘的方式获取地址。