Как я могу использовать java.lang.instrument в приложении Eclipse RCP?

Чтобы использовать инструментальные функции, представленные в JDK 5, вы можете использовать-javaagent флаг передан в JVM. Это вставит экземпляр класса Instrumentation в статическийpremain метод. Например, в таком классе:

public class MyClass {
    public static Instrumentation inst;
    public static void premain(String options, Instrumentation inst) {
        MyClass.inst = inst;
    }
}

С соответствующим файлом манифеста вы можете выполнить это следующим образом:

 java -javaagent:myfiles.jar SomeClass

Это вызывает метод premain, тоmain изSomeClass, Этот подход используется вJava.SizeOf Project угадать приблизительный размер объекта Java.

Хорошо, теперь в Eclipse RCPу каждого пакета есть свой загрузчик классов, Это означает, что статический инструментарий, который мы сохранили в нашем MyClass, невидим для приложения Eclipse. Javaagent использует один загрузчик классов, а пакеты Eclipse загружаются с другим. Когда мы получаем доступMyClass.inst из плагина этоnull, какэто класс не совпадает с классом, который загружен и вызван javaagentpremain на.

Другие подсказки относительно возможного решения:эта тема в списке рассылки rcp. Но ничего неопровержимого.

Есть ли способ обойти это?Eclipse-BuddyPolicy Намек на то, что в статье Eclipsezone звучит хорошо. Я пытался:

Eclipse-BuddyPolicy: app

в моих плагинах без удачи. Мне нужно что-то вродеEclipse-BuddyPolicy: javaagent, Есть идеи?

Ответы на вопрос(1)

Ваш ответ на вопрос