Как отследить события блокировки в JVMTI
JVMTI предлагает мероприятия ContendedMonitorEnter
а также ContendedMonitorEntered
обнаруживать события, связанные с использованием synchronized
, synchronized
это ничто иное, как ReentrantLock.
Теперь я хотел бы также отслеживать события, связанные со структурой блокировки: ReentrantLock
, Я мог бы подключиться к методу входа / выхода его lock()
а также unlock()
События. Однако эти перехватчики событий не предоставляют никакой информации об объекте, для которого они были вызваны. Таким образом, я не могу отличить разные ReentrantLock
и, следовательно, не может регистрировать любую информацию о том, какая блокировка в данный момент заблокирована.
Есть ли другой способ отслеживать это?
1 ответ
Вы должны будете инструктировать загружаемые классы самостоятельно. Это довольно сложно, но, к счастью, у нас есть java_crw_demo.c, который поставляется (вместе с другими полезными примерами) вместе с JDK. Там вы можете найти реализацию, которая выполняет некоторые основные виды инструментовки. Вы можете легко изменить его, чтобы сделать работу. Я делаю это сейчас для какого-то академического студенческого проекта.