Вопрос

Мне нужно написать агент для моего приложения Java, который делает некоторые конкретные вещи на каждом создании массива. До сих пор я не смог найти способ запустить свой код на этом событии.

  1. java.lang.instrument.classfileTransformer не получает «классы массива», поэтому нет способа зацепить «конструктор массива». И «классы массива никогда не поддаются изменению»
  2. Не соответствует этому событию JVMTI

Какие-либо предложения?

Это было полезно?

Решение

Вам нужно изменить байт-код вашего приложения для этого. я обнаружил ObjectWeb ASM быть лучшим инструментом для работы. Общая идея - это:

  1. Создайте агента JVMTI, который перехватывает интересы вас классы.
  2. Передайте классы, которые вы хотите инструментально, на трансформатор класса ASM.
  3. В трансформаторе класса вы можете перехватить Java Opcodes, связанные с построением массива, например, Anewarray (см. JVM Spec для большего).
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top