Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Quais são as vantagens e as desvantagens dos sistemas híbridos, que utilizam máquinas virtuais, como os adotados pelas linguagens de programação Java (JVM) e C# (CLR)?

Alguns sistemas de implementação de linguagem são um meio-termo entre os compiladores e os interpretadores puros; eles traduzem programas em linguagem de alto nível para uma linguagem intermediária projetada para permitir fácil interpretação. Esse método é mais rápido do que a interpretação pura porque as instruções da linguagem fonte são decodificadas somente uma vez (Sebesta, 2000).

Provavelmente, a maior vantagem na utilização de sistemas híbridos seja a questão da portabilidade, onde um mesmo programa pode ser executado em qualquer plataforma que possua a máquina virtual apropriada, sem recompilação. Isso é possível pois em vez de gerar código de máquina específico para um processador e sistema operacional (como ocorre em C ou C++), o compilador traduz o código-fonte para uma linguagem intermediária padronizada (bytecode ou CIL), que independe da arquitetura (x86, ARM, etc.) e do sistema operacional (Windows, Linux, macOS).

A máquina virtual interpreta o bytecode ou CIL para a linguagem de máquina do hardware real no momento da execução, adaptando-o ao perfil de execução observado de modo que o acesso aos recursos do sistema possam ser controlados (sandbox). Ademais, trechos de código frequentemente executados (hot spots) podem ser recompilados e otimizados em tempo de execução.

Outra vantagem interessante que as máquinas virtuais oferecem é o suporte a múltiplas linguagens de programação, permitindo que o programador tenha a sua disposição um leque de opções, como por exemplo, no caso da JVM, a possibilidade de desenvolver em Java, Kotlin, Scala, Groovy, Clojure entre outras.

Dentre as desvantagens na utilização de máquinas virtuais, está o consumo maior de memória, pois além de executar o programa desejado, a própria máquina virtual também requer recursos para si mesma. A complexidade de implementação de uma máquina virtual também pode comprometer a execução do programa desejado, pois bugs na implementação da máquina virtual podem afetar todas as aplicações que dependem dela.

Sebesta, Robert W. (2000). Conceitos de Linguagens de Programação. 4ª edição. Porto Alegre: Bookman. 624 páginas.