domingo, 6 de abril de 2014

Máquina Virtual

Em algumas linguagens de programação como o C/C++ e Pascal. Tínhamos a seguinte situação ao compilarmos o código fonte:

Arquivo fonte compilando em linguagem C/C++












Neste exemplo o código fonte é compilado para um código de maquina que seria executado para a plataforma onde foi compilado e sistema operacional. Algumas vezes o código fonte era escrito visando uma unica plataforma.

Este código executável( binário), será capaz de conversar apenas com o sistema especifico para o qual foi compilado ou seja poderá ser executado apenas nesse sistema operacional.

Execução de binário feito para OS especifico.


Com isso pode-se ver como será complicado se quisermos que no executável(binário) seja executado em diferentes sistemas operacionais. Teríamos que compilar uma vez para Windows, outra para Linux, Mac Os e assim por diante.
Muitas vezes suas aplicações vão utilizar bibliotecas, que poderão não existir em outros sistemas operacionais. Que é o caso da biblioteca utilizada para criar interfaces gráficas no Windows a qual em sistemas Linux é totalmente diferente, pôs o Linux tem a sua própria biblioteca para criação de interfaces.

Então surge a grande pergunta:

Como criar então uma aplicação que rode de forma parecida nos
dois sistemas operacionais?

Precisamos reescrever um mesmo pedaço da aplicação para diferentes sistemas operacionais, já que eles não são compatíveis.

Java utiliza do conceito de máquina virtual, onde existe, entre o sistema operacional e a aplicação, uma
camada extra responsável por “traduzir” - mas não apenas isso - o que sua aplicação deseja fazer para as
respectivas chamadas do sistema operacional onde ela está rodando no momento:


Conceito de maquina virtual.


Dessa maneira se abrirmos uma janela no Linux é a mesma no Windows. Nisto ganhamos independência de sistema operacional.  Ou, melhor ainda, independência de plataforma em geral: não é preciso se preocupar em qual sistema operacional sua aplicação está rodando, nem em que tipo de máquina, configurações, etc.

Sua aplicação sempre conversara com a maquina virtual, que por sua vez conversara com o sistema operacional nunca conversando diretamente com o sistema operacional.

A JVM (Java VirtualMachine) é a maquina virtual java.

A maquina virtual possui um conceito bem mais amplo do que a de um mero interpretador. O nome virtual já sugere tudo, maquina virtual "computador de mentira": possui tudo que um computador possui.
Em outras palavras, ela é responsável por gerenciar memória, threads, a pilha de execução, etc.

Essa característica é interessante: como tudo passa pela JVM, ela pode tirar métricas, decidir onde é melhor
alocar a memória, entre outros. Uma JVM isola totalmente a aplicação do sistema operacional. Se uma JVM termina abruptamente, só as aplicações que estavam rodando nela irão terminar: isso não afetará outras JVMs que estejam rodando no mesmo computador, nem afetará o sistema operacional.

Essa camada de isolamento também é interessante quando pensamos em um servidor que não pode se sujeitar a rodar código que possa interferir na boa execução de outras aplicações.
Essa camada, a máquina virtual, não entende código java, ela entende um código de máquina específico.
Esse código de máquina é gerado por um compilador java, como o javac, e é conhecido por “bytecode”, pois existem menos de 256 códigos de operação dessa linguagem, e cada “opcode” gasta um byte. O compilador Java gera esse bytecode que, diferente das linguagens sem máquina virtual, vai servir para diferentes sistemas operacionais, já que ele vai ser “traduzido” pela JVM.

E é dai que vem o grande slogan que a Sun usava para o Java, já que você não precisa reescrever partes da sua aplicação toda vez que quiser mudar de sistema operacional.

Slogan do JAVA feito pela SUM.
















Referências:
Apostila do curso FJ-11 - Java e Orientação a Objeto. Endereço: http://www.caelum.com.br/apostila-java-orientacao-objetos/ - acessado em 06/04/2014 às 19:35:25 pm.

Universidade XTI - Curso de Java 7. Endereço: https://www.youtube.com/user/ricardolopescosta - acessado em 06/04/2014 às 19:39:25 pm.

Nenhum comentário:

Postar um comentário