Как отследить события блокировки в JVMTI

JVMTI предлагает мероприятия ContendedMonitorEnter а также ContendedMonitorEntered обнаруживать события, связанные с использованием synchronized, synchronized это ничто иное, как ReentrantLock.

Теперь я хотел бы также отслеживать события, связанные со структурой блокировки: ReentrantLock, Я мог бы подключиться к методу входа / выхода его lock() а также unlock() События. Однако эти перехватчики событий не предоставляют никакой информации об объекте, для которого они были вызваны. Таким образом, я не могу отличить разные ReentrantLock и, следовательно, не может регистрировать любую информацию о том, какая блокировка в данный момент заблокирована.

Есть ли другой способ отслеживать это?

1 ответ

Решение

Вы должны будете инструктировать загружаемые классы самостоятельно. Это довольно сложно, но, к счастью, у нас есть java_crw_demo.c, который поставляется (вместе с другими полезными примерами) вместе с JDK. Там вы можете найти реализацию, которая выполняет некоторые основные виды инструментовки. Вы можете легко изменить его, чтобы сделать работу. Я делаю это сейчас для какого-то академического студенческого проекта.

Другие вопросы по тегам