Java e o uso de Máquinas Virtuais
Com o sucesso da linguagem de programação Java começamos a ouvir falar muito em máquina virtual, no entanto essa é uma prática mais comum e antiga do que se imagina. Para entender toda a atenção que foi dada a esse assunto precisamos entender os tipos de máquinas virtuais, suas aplicações e benefÃcios.
A primeira coisa a se considerar e que uma máquina virtual é um programa de computador que deve rodar sobre uma máquina real. Baseado nisso temos que identificar, de forma simplificada, as possibilidades que existem:
- Programas para virtualização de uma máquina real igual a máquina base – existem alguns programas que são capazes de oferecer ao usuário uma interface como se estivesse trabalhando com uma máquina real, mas que na verdade é um programa instalado em um sistema operacional base. Nessa categoria temos por exemplo o vmware que conta com versões gratuitas para windows e linux e permite que o usuário instale um sistema operacional diferente funcionando sobre a mesma arquitetura da máquina base.
- Programas para virtualização de uma máquina real diferente da máquina base – nesta categoria temos as plataformas para desenvolvimento para celular por exemplo. Muitas vezes o processador de um celular tem arquitetura completamente diferente da máquina onde trabalhamos. Temos ainda o simulador para Cell Broadband Engine fornecido pela IBM que pode ser usado no desenvolvimento para o processador que equipa o Playstation 3.
- Máquinas virtuais e interpretadores de linguagens – nesta categoria encontramos a máquina virtual da linguagem Java. São programas que atuam para a linguagem de programação como se fossem um computador real, dessa forma podemos criar bibliotecas que funcionam de forma idêntica em diferentes sistemas operacionais. Eventualmente é necessário escrever alguma parte do código para a plataforma base nativa, quando isso acontece precisamos fornecer versões compiladas desse trecho para as diversas plataformas onde nossa máquina virtual vai executar.
As máquinas virtuais para linguagens de programação tem um papel muito importante atualmente, pois vivemos uma época em que as empresas precisam de flexibilidade para vencer. No passado o modelo que se adotava era ter todos os produtos de uma mesma linha de um mesmo fornecedor. O que aprendemos é que esse tipo de situação acaba por restringir as possibilidades da empresa, isto porque se o fornecedor tira um produto de linha, não importa se aquele produto ainda atende os clientes, eles precisarão de atualizações. Então o modelo atual procura o desenvolvimento de sistemas baseado em integração de produtos de fornecedores diferentes, mas que falam padrões abertos e conhecidos, ou seja, ninguém é o dono da especificação, ela é um acordo entre os fornecedores.
A grande jogada da Sun foi publicar para as pessoas qual era a especificação da máquina virtual Java permitindo que qualquer pessoa escrevesse sua própria máquina virtual para sua plataforma. Originalmente a máquina virtual só contava com duas versões “oficiais” da Sun, uma para seu sistema operacional Solaris e outra para a plataforma Windows. A primeira máquina virtual Java para Linux foi um projeto open-source chamado Blackdown Java, atualmente descontinuado. Com o tempo a Sun passou a fornecer uma implementação oficioal para Linux.
Quando lançada em 1995, a linguagem Java competia diretamente com usuários de C e C++ muitos baseados em Windows, então a existência de uma linguagem poderosa, compatÃvel com Windows e que tinha um ambiente de programação e execução gratuitos foi uma grande porta de entrada para adoção dessa nova tecnologia. Acredito até que essa estratégia tenha sido a maior causa do sucesso da linguagem.
Um outro ponto interessante sobre usar esse tipo de plataforma é que temos então pelo menos dois nÃveis de trabalho independente que podem melhorar o desempenho de nossas aplicações:
- Engenheiros continuam trabalhando para obter melhores e mais rápidas máquinas reais, para isso precisam fazer diversas mudanças, as vezes radicais como é o caso da arquitetura do Cell Broadband Engine. Esse esforço de forma independente forçaria a recompilação e/ou adaptação de aplicações existentes para a nova arquitetura…
- …Mas como existem as empresas que fornecem máquinas virtuais baseadas em uma especificação, então essas equipes adaptam apenas a máquina virtual para essas novas arquiteturas de hardware para tirar o melhor proveito das melhorias.
Enquanto isso, se aprendermos a usar os algoritmos existentes e nos dedicarmos a melhorar nossas técnicas de desenvolvimento para evoluir a partir do artesanato de software, nossas aplicações podem ser executas em múltiplas plataformas sem precisarem ser recompiladas.


Leave a Reply