The Dynamic Code Evolution VM

Every single java developer out there needs to know about the Dynamic Code Evolution VM (DCEVM) being turned out by Thomas Würthinger and his team:

    http://ssw.jku.at/dcevm/

This is truly an amazing piece of technology. It enables full hot swap in a JVM, allowing you to change method signatures, add and delete methods and so on, with impunity. You will rarely need to restart your JVM once you start using it.

And it is available…. FOR FREE.

Guidewire has sponsored the development of the DCEVM ever since we first learned about it at the 2009 JVM Language Summit. It has been a huge productivity boon for us and is a crucial bit of technology in the Guidewire (and Gosu) stack.

More people need to know about the DCEVM.

Download it, stop bouncing your JVM, and tell a friend.


16 Comments on “The Dynamic Code Evolution VM”

  1. Peter Rexer says:

    It is also available on the java.net website.

    http://java.net/projects/dcevm

    Rumors that we have heard are that Oracle plans to put it into JDK 1.8. But it already works with JDK 6 and JDK 7. No sense waiting for the amazing feature when you can get it and start enjoying it today.

  2. Interested Programmer says:

    Could you explain a bit why this is so cool? What’s a typical use case that this would help in?

    • Alan Keefer says:

      It’s useful for making code changes in development to a long-running process, like a server application. For example, suppose you’re on a particular page, and you want to try changing the behavior of a button that calls out to a particular method, say User.assign(). It’s pretty nice if you can just make your changes, hotswap the changed Java code, and then click the button to see if it works as expected or needs further tweaking. The standard Oracle JVM can only swap method bodies, so if your changes to User.assign() happened to add any new helper methods, or caused a change in the method’s signature, or anything else, the standard VM will refuse to hotswap, and you’ll have to restart the whole server. It’s also especially useful when trying to debug a problem; you just leave the server up, fix the bug, recompile, and try again. Having to restart your server, then navigate back to the right page/state in the application is annoying if that server restart takes more than about 5 seconds; if it’s more like a minute, you’ll spend a lot of time waiting.

      At Guidewire, we also use it for running tests inside a remote, running server, which is useful if you need to do integration tests but your server takes a while to start up. You can just start up the remote server, then do your normal TDD cycle of code/test or even just tweak test/rerun test if you’re trying to fix it, and the cycle time on each test run ends up as a few seconds, rather than maybe 45 seconds to restart the whole server. That may not sound like much, but when you have to re-run a test 20 times as you add tests or fix it, having each run take 5 seconds instead of 45 really adds up.

    • Carson Gross says:

      Sure.

      If you are using an IDE such as IntelliJ to do Java development in and you launch a program or test suite, and you make a change and compile, you’ve probably noticed that the IDE will attempt to reload the class changes. In the standard Sun JVM, reloading is limited only to changing method implementations: in other cases (e.g. changing a method signature) you’ll get an error, saying that the JVM doesn’t support changes of this type. (The IBM JVM is better at this, but still not great.)

      Thomas and his team have come up with a way to support full hotswap, so any and all changes can be loaded immediately.

      So as you are debugging a system and making changes, you don’t need to reboot to see your changes immediately. This can dramatically cut down on the debug-fix-test cycle time. I’ve gone days without restarting a JVM while building a system.

  3. […] Thomas Würthinger is a JVM hero (guidewiredevelopment.wordpress.com) […]

  4. Mansour says:

    It will be nice when they provide 64 bit support for linux.

  5. Mike says:

    I really seriously hope this thing isn’t going die a silent death… It’s awfully awfully quiet here and everywhere about this whole dce thing… getting a little nervous…

    • Carson Gross says:

      Heya Mike,

      Thomas and his coworkers are now oracle employees and are working on getting the DCEVM integrated into the core JDK as we speak.

      We are using the 1.6 version internally at Guidewire, and it has added an incredible amount of value.

      Cheers,
      Carson

  6. I have found that loading DECVM cause Eclipse to malfunction. Since I use both Studio and Eclips, I have had to uninstall DECVM. Has anyone else experience this problem?

  7. Neil Gandhi says:

    Is there any information about OSX support on Java 1.7 (- When trying to install it I get “64 Bit Soylatte is not supported in this installer version”

  8. georgiosleon says:

    HI all does anyoneknow how to install it for eclipse ?

  9. georgiosleon says:

    HI all any pointers to how to install and use for Eclipse IDE ?

  10. nan says:

    Does it support IBM Java ? I see that the installer is not able to install on IBM Java. Also any pointers on how to install and use with ECLIPSE IDS

  11. Badri says:

    The Dynamic Code Evolution VM

    Does it work with weblogic,iam trying to use it in weblogic server and java 1.6.29

    its not working………… 😦

    plz help me


Leave a reply to William Shaffer Cancel reply