JRebel, ZeroTurnaround's flagship product, is a JVM Java Agent that integrates with application servers, making classes reloadable with existing class loaders. Only changed classes are recompiled and instantly reloaded in the running application. JRebel plugs into IDEs and build systems. Classes and static resources are loaded straight from the workspace. JRebel integrates with over 90 frameworks. Dedicated JRebel plugins will rebuild caches, rewire components and apply configuration to the runtime as necessary.
Skip the Build
Compile in the IDE: With JRebel you avoid having to rebuild the entire application to reload code changes, this is a huge time savings. Instead of running your full build process, simply use the compiler built into your IDE and JRebel will reload the code into the JVM. For some users, this is as simple as saving the Java class, others just hit compile.
Maven and Gradle: JRebel also supports reloading code inside of modules and build artifacts, as long as you have the source code. Classes and resources are read directly from your workspace, stop rebuilding your JARs, EARs, and WARs to see code changes. There are plugins for Maven and Gradle that configure your modules for JRebel for you.
With JRebel you can develop in cloud environments even faster than you currently do locally. Instead of having to repackage your application, transfer it to the a remote server, then go through the entire restart/redeploy process on the remote server, JRebel sends only the compiled changed classes to the remote server and then reloads the code changes instantly. JRebel works with many cloud providers, firewalls are no problem. JRebel uses the same port as your application, and we support encrypting the connection for public clouds.
Some Overhead Expected
< 50 % startup-time overhead: JRebel will instrument all your application classes at load-time so somewhat longer startup time is to be expected. You will make up for it by restarting way less.< 10 % CPU overhead: To allow methods to be added to classes, JRebel introduces some indirection on method calls that causes minor overhead.
< 2x PermGen overhead: Classes are bigger with JRebel, so it’s a good idea to double your PermGen setting, and if you have nothing at the moment add -XX:PermGen=128m to your JVM command line.
JRebel feature comparison matrix:
|Java EE Support||JVM Hot Swap|
|Time to reload||< 1s||< 1s|
|No memory leak|
|Changes to Class structure
The ability to make changes when coding a class. Add, remove, change or rename almost anything, including Fields, Methods, Signatures and Types.
|Changes to method bodies|
|Changing static field value|
|Adding/removing enum values|
|Adding/removing implemented interfaces|
Increasing developer productivity by instantly reloading class files, resource files and framework configuration even when deploying a packaged WAR/EAR outside of exploded development.
|Skip builds for WAR directories|
|Skip builds for .WAR/.EAR class updates|
|Skip builds for .WAR/.EAR resource updates|
|Map multiple source dirs to one .WAR/.EAR target dir|
|Map classes and resources with include/exclude patterns|
|Map multiple source dirs with Ant-style patterns|
|Use system properties to make mapping machine-independent|
Enables JRebel functionality in remote development environments. Keeps the remote runtime in sync with the local IDE workspace.
|Application updates over HTTP|