Máquina Virtual Java - Java Virtual Machine (JVM)
Não se pode falar em portabilidade do Java sem envolver o principal aliado da linguagem: sua máquina virtual. A Máquina Virtual Java - ou JVM - permite que Java seja uma linguagem multiplataforma, isto é, permite que o conceito Write Once, Run Everywhere seja aplicado à prática - com as restrições que vimos no Post anterior, é claro.
Para que você compreenda um pouco sobre o funcionamento da JVM, é necessário que tenha ao menos um conhecimento superficial sobre qual a utilidade de um compilador. Se você é programador de primeira viagem, não se preocupe. Faremos uma breve explanação para que comecemos a entender como um compilador e a JVM funciona.
Compilador
Imagine que a terra foi invadida por alienígenas, e desde então 5 anos se passaram. Logo, alguns poucos seres humanos adquiriram a habilidade de se comunicar, via escrita, em idioma terráqueo e em idioma alienígena. Se comunicar diretamente com um alienígena não era uma tarefa fácil, pois mesmo na forma escrita, a comunicação era bastante complexa para seres humanos. Desde já, a ajuda dos tradutores era indispensável para uma boa comunicação entre uma pessoa e um e.t.
Os tradutores são exigentes. Mesmo para uma simples frase que você queira enviar para um alenígena, eles além de exigirem que você escreva corretamente as palavras, exigem também que você obedeça a um conjunto de regras semânticas pré-estabelecidas para que a tradução seja bem sucedida.
Se queremos enviar uma mensagem para alguém devemos tornar esta mensagem entendível para o receptor, para que este compreenda o que queremos dizer. Como todos sabemos, para se enviar uma mensagem, não basta escrever corretamente, mas também escrever de forma que você consiga se expassar a mensagem que você quer.
Para nos comunicarmos com um computador, precisamos da ajuda de um tradutor - como na pequena ficção acima. A este tradutor chamamos de compilador. Uma linguagem de programação permite que os programadores enviem instruções para os computadores de uma maneira mais amigável, mais entendível aos seres humanos. Porém, os computadores não entendem o que está escrito de forma "amigável" aos seres humanos, pois eles possuem sua própria linguagem, a linguagem de máquina.
Observe a figura abaixo:
* Na etapa 1, seu código, de uma linguagem de programação qualquer, foi digitado e está disponível para ser compilado por um compilador da linguagem em questão.
* Na etapa 2, seu código-fonte será convertido em código de máquina pelo compilador, e este estará pronto para ser executado em um determinado Sistema Operacional.
O compilador da linguagem Java
O JDK inclui o compilador da linguagem, que podemos chamá-lo de javac. Porém, em vez de trabalhar como os compiladores usuais, melhor dizendo, em vez de converter o código-fonte diretamente em código de máquina, o javac o converte em bytecodes, que são códigos que não serão executados diretamente pelo processador de uma máquina, mas por uma máquina virtual.
Supondo que você queira executar um programa Java cujo código esteja escrito em um único arquivo, observe o esquema abaixo para compreender o percurso escrita do código --> execução:
* Na etapa 1, seu código foi digitado e está disponível para ser compilado.
* Na etapa 2, o javac - compilador da linguagem Java - foi acionado, e este por sua vez verificará, como todo compilador, se o código está escrito corretamente, ou seja, se o código é compilável. Estando o código sem erro sintático ou semântico algum, este será convertido em bytecodes, que serão interpretados pela JVM. Caso contrário o processo de compilação será interrompido e o motivo da interrupção deverá ser exibido.
* Na etapa 3, a Máquina Virtual Java - JVM - se encarrega de interpretar os bytecodes gerados pelo javac para que seu código seja executado. No caso da plataforma J2SE, o código compilado neste exemplo deverá rodar em Windows, Linux e Solaris.
NÃO ENTENDEU PARA QUÊ SERVEM OS BYTECODES E A JVM?
Java é uma linguagem compilada ou interpretada?
Java é uma linguagem compilada por ter seu código compilado antes de ser executado. E Java também é uma linguagem interpretada por ter seus bytecodes interpretados por uma máquina virtual.
Entendendo o que é JRE
Para desenvolver seu programa Java com certeza você teve de baixar o JDK, correto? O JDK é um kit completo para desenvolvimento, que inclui uma máquina virtual - JVM; um compilador - que acabamos de abordar; uma imensa e rica API e toda sua documentação.
Imagine que você queira distribuir sua aplicação para 10 clientes, todos eles com diferentes máquinas e diferentes Sistemas Operacionais. De imediato você pode pensar:
"não há problemas. Em cada máquina eu instalo uma JVM para rodar meu programa e problema resolvido.".
Este tipo de pensamento está correto, porém um pouco ingênuo. Lembre-se de que a JVM é apenas um complemento do JDK. Daí outra idéia pode surgir:
"se a JVM é um complemento do JDK, então vou instalar o JDK nas máquinas de todos os clientes."
Se você pensou assim, parabéns! Esta é uma solução, mas infelizmente não é a mais eficiente. O motivo é simples: você por acaso se lembra de quantos megabytes, aproximadamente, são o instalador do JDK? Nada minúsculo, não é? E por acaso você já verificou o tamanho do Java já instalado no seu computador? Algo perto de 200 MB, no caso do Java 5. Porém, há um detalhe que não foi citado ainda: a instalação do JDK implica também na instalação do JRE - Java Runtime Environment. O JRE é tudo o que você precisa instalar nas máquinas dos 10 clientes. E o melhor é que o JRE pode ser baixado e instalado individualmente, sem a necessidade instalar também o JDK. O peso do JRE é muito inferior ao peso do JDK. Desde já é mais vantajoso instalá-lo nas máquinas que irão rodar seu programa, em vez de instalar o JDK inteiro. Seria um desperdício de memória instalar um Kit completo de desenvolvimento de programas Java em máquinas que deveriam apenas executar um programa Java.
JRE em Websites
Talvez algum dia você se depare com um website que requeira exibir um Applet. Se você não tiver uma JRE instalada, você não conseguirá executá-lo em seu browser. A partir do momento em que você instala o JDK ou o JRE, automaticamente os plugins do JRE são instalados em alguns browsers.
ATENÇÃO!Lembre-se de que o Java tem várias versões, e a cada nova versão ele inclui novos recursos e mantém* os recursos da versão anterior. Então, se os bytecodes possuem código do Java 5, estes deverão ser interpretados por uma JRE do Java 5 ou superior. Não é possível executar um código de Java 5 em uma JRE 1.4 ou inferior. E assim será também para as versões posteriores.
* ao decorrer das versões alguns recursos são depreciados - em inglês: deprecated - por terem se tornado obsoletos.
Bem, este Post encerra por aqui. Breve breve estaremos aprendendo a escrever e executar nosso primeiro programa .
Tenha um bom dia.









