Hot Swap

26 Nov
2006

Segundo a Wikipedia,

Hot swapping can also refer to the ability to alter the running code of a program without having to interrupt its execution, although only a few languages support it. Those that do include Lisp, Erlang, and Smalltalk. The Java programming language also supports this technology, but only through the Java Platform Debugger Architecture (JPDA) : it is only possible to change the code while the program is in the control of a Debugger. Interactive programming is a paradigm that makes extensive use of hot swapping so that the programming activity becomes part of the program flow itself.

O post do Daniel (Hot Code Replacement), contando como fazer hot swap de classes com o OC4J, me fez pensar numa coisa: será que realmente são poucos que conhecem a “feature” de trocar classes em tempo de execução, sem parar sua aplicação, e nem a VM?

Bom, mesmo sem ter 1/3 de conhecimento sobre VMs que o Rodrigo (louds), por exemplo, vou tentar explicar. Parada para comentário de utilidade pública: se você não assina o blog dele, faça um favor a si mesmo e vai lá. Hoje mesmo ele anunciou que vai liberar os fontes da máquina virtual que ele começou a desenvolver.

Voltando ao assunto, desde a JDK 1.4 (sim, hot swap é relativamente velho), é possível trocar a implementação de métodos sem reiniciar a aplicação. Notem bem, implementação, ou seja, se você trocou qualquer coisa na assinatura de um método, criou algum novo, adicionou uma variável de instância da classe, você precisa parar a VM, compilar a classe, e iniciar novamente.

No entando, linguagens dinâmicas, como Ruby (com site novo), permitem trocar trocar qualquer coisa das suas classes em tempo de execução, seja métodos, atributos, whatever. Parece covardia comparar, né?

Porém, lendo um pouco mais à respeito, fazer com que a JVM suporte isso também é perfeitamente possível tecnicamente (louds!!), mas precisariam ser feitas enormes mudanças no seu funcionamento, e acredito que seja esse, um dos principais motivos de não terem feito nos primórdios do hot swap – JDK 1.4.

O assunto parece estar realmente chamando ateção, pois acabou de sair um artigo no Artima, The JVM as an (Un)Common Language Runtime, e um dos pontos que o autor destaca como sendo um dos principais desafios para a implementação de linguagens dinâmicas na JVM:

Hotswapping: The main idea is to allow code changes on the fly, while they are running. The full capability of hotswapping implies any kind of change to be supported, addition/modification/removal of methods and attributes including changes in inheritance hierarchy.

Se isso não fosse suficiente, existe um tópico na SDN, Hotswap support for schema / shape changes discutindo o assunto, e o bug report 4910812 – Enhance Hot Code Replacement com 300+ votos.

Isso permitiria baixar para praticamente zero o turnaround de desenvolivmento de aplicações, dando um grande fôlego para Java como linguagem, pois já aumentaria significantemente a velocidade de desenvolvimento, evitando a perda de minutos que já estamos acostumados entre parar servidor de aplicação, fazer re-deploy, iniciar aplicação, …

Classloader tricks only take you so far.

Popularity: 4% [?]

by-nc-nd

Comment Form

top