Примитивное значение существует только как поле в структуре, частью которой оно является (или непосредственно в стеке).Поскольку это не объект, на него нельзя ссылаться.Попробуйте что-то вроде следующего:
select v from Vector v where v.x == 1.0 || v.y == 1.0 || v.z == 1.0
Если вы хотите исследовать все поля с плавающей точкой во всех объектах, должно иметь возможность использовать для этого возможности отражения OQL, используячто-то вроде следующего:
select filter(heap.objects(), function(it) {
var cls = classof(it);
while (cls) {
for (var i = 0; i < cls.fields.length; i++) {
var field = cls.fields[i];
if (field.signature == 'F' && it[field.name] == 0.0)
return true;
}
cls = cls.superclass;
}
return false;
})
Однако, хотя это работает правильно с использованием jhat, это не работает в моей версии VisualVM (1.6.0_22), потому что cls.fields, похоже, неправильно возвращает списокстатические поля, а не поля экземпляров.
Это также очень медленно, занимает 10 секунд для поиска дампа кучи 1 МБ.Возможно, возможно оптимизировать код, а также ускорить процесс, выполнив поиск только в ограниченном наборе классов.