Мне удалось позвонить ObjectHeap.iterateObjectsOfKlass
(с помощью SA), чтобы получить все объекты, принадлежащие определенному классу. Результат - именно то, что я ожидал, но производительность - нет.HotSpot Serviceability Agent iterateObjectsOfKlass() слишком медленный
Мне потребовалось> 800 секунд, чтобы получить мой результат, в течение которого целевая виртуальная машина приостановлена. Целевая куча VM составляет около 2 ГБ. Я знаю, iterateObjectsOfKlass
позвонит iterateExact
.
Мой вопрос: выполняют ли эти методы итерацию/перемещение всей кучи только для получения объектов для 1 класса? Я разочарован, так как я ожидаю, что с одним классом результат должен вернуться в течение 10 секунд.
Хороший вопрос. Однако это было не совсем ясно в форме происхождения (особенно для людей, не знакомых с агентом Serviceability Agent). – apangin
Конечно, он должен отсканировать всю кучу, чтобы найти все объекты любого типа. Тип фильтра не влияет на этот факт. Как вы ожидали, что это сработает? – Holger
Я не ожидал сканирования всей кучи. Я думал, что, поскольку класс был указан, iterateObjectsOfKlass будет хирургическим в своем поиске объекта. - Маттиас. Спасибо @Holger –