Разрешит ли JDK 7 программу изменить свой собственный код?
Вопрос
Я заметил API компилятора в JDK 7. Означает ли это, что программа Java может перекомпилировать и изменить определение программы бега?
На данный момент я знаю, что такие продукты, как Javarebel, могут сделать это, но чтобы предложить бесплатную загрузку продукта, исключая Javarebel, который оплачивается за продукт.
Решение
Компилятор API уже доступен в Java 6.
Мы не можем изменить код уже загруженных классов - замена горячего кода по -прежнему будет ограничена отладкой, но мы можем скомпилировать исходный код из приложений Java и загружать вновь созданные классы во время выполнения.
Другие советы
Да, это возможно. Одним из способов является написание специализированного класса-загрузчика и использовать инструмент улучшения байт-кодов, такой как ASM, и изменить части вашего приложения во время выполнения. Также возможно достичь того же, используя javaagent
и опять ASM
или что -то подобное.
Насколько я знаю, Java 7 не вводит никаких дополнительных методов самомодификации.
Некоторые из последствий уже можно сделать с помощью API компилятора и ClassLoaders
, в то время как некоторые другие можно сделать, используя Jvm ti.
Но, насколько я знаю, Java 7 не вносит каких -либо серьезных изменений в этих API.
Существует проект по добавлению функциональности перезагрузки класса, похожей на Jrebel, в OpenJDK 7, хотя в настоящее время он не является частью Open JDK 7: Динамический код Evolution VM (DCEVM)
Он работает через нормальный Jvmti Механизм переопределения класса.
Копья предлагает функциональность по этим направлениям; Он доступен бесплатно, но не свободно перераспределяется.
Компилятор API (JSR 199) имеет мало общего с перезагрузкой кода или самомодификацией, за исключением того, что в качестве программы, которая желает в некотором роде загрузить новый байт-код, может использовать 199 для создания этого байт-кода из источника Java, а не использования API ассемблера. Как Асм.
Обновлять:
Похоже, что Javelon больше не доступен, так как он был приобретен Zeroturnaround (создатели Jrebel)
С домашней страницы копья:
Примечание: Javeleon больше не будет доступен для загрузки в качестве автономного продукта.