| dbpprop:abstract
|
- JavaRebel is a plugin for the Java Virtual Machine that enables on-the-fly reloading of changes made to Java class files. Starting from version 1.4, the Java Virtual Machine includes a hot swapping feature that allows developers to update the code on-the-fly during debugging. However hot swapping was limited to updating method bodies only, and trying to add methods and fields to classes would not succeed. Since a Java compiler generates synthetic fields and methods for features like class literals and inner classes the feature was even less useful than could be expected. JavaRebel is an alternative solution to updating classes which does not require a debugging session to be started. Instead it monitors the file system for changes and updates the classes in-memory. This means that only classes compiled to ". class" files will be updated and changes to classes in JAR files will be ignored. JavaRebel imposes a considerable performance overhead on the application and should never be used in production or performance tests. It is meant to be a development tool only.
- JavaRebel - плагин для виртуальной машины Java, который позволяет "на лету" перезагружать классы, которые были изменены с момента развёртывания приложения. Начиная с версии Java 1.4, виртуальная машина Java поддерживает горячую замену классов, которая может использоваться разработчиками, например, для внесений изменений в написанный код во время отладки приложений. Однако, применение этого свойства было очень ограничено - можно было вносить изменения только в тела методов, но добавление новых методов или полей не поддерживалось. Поскольку компилятор Java создаёт искусственные переменные и методы для таких объектов, как литералы классов, внутренние классы и т. д. , то вышеупомянутое свойство было не настолько удобным в обращении, чем предполагалось. В свою очередь, Java Rebel является альтернативным решением этой проблемы. Использование этого плагина позволяет делать горячую замену без таких сильных ограничений. Java Rebel постоянно отслеживает изменения в файловой системе, и, если таковые находятся, то этот плагин обновляет изменённые классы и ресурсы в памяти. Конечно, этот плагин намного более функциональней, чем простое использования свойства горячей замены в виртуальной машине Java, но у него есть и свои недостатки. Первое, это то, что всё же существуют ограничения на те объекты, которые этот плагин может обновлять в памяти. Не поддерживается следующее: изменение существующих конструкторов классов; статических переменных, методов, классов; реализация классами нового(ых) интерфейса(ов). Например, при добавлении новой переменной в класс и внесении этой переменной в конструктор класса, эта переменная во всех уже существующих классах будет равна null - но это, конечно, понятно. Статические объекты загружаются в память один раз вместе с классом. Помимо этого, этот плагин уменьшает производительность системы, на которой происходит процесс горячей замены, поэтому рекомендуется его использовать только в процессе разработки систем. Несмотря на всё это, JavaRebel существенно снижает время разработки за счёт экономии времени на развёртывание приложения - это особенно касается небольших, но часто вносимых изменений в код приложения и его ресурсов.
|