jul 5 2009

JVM – Java Virtual Machine

Dentro da linguagem de programação Java existe um importante “instrumento”, que permite às aplicações desenvolvidas nessa linguagem seja multi-plataforma, esse “instrumento” é o que conhecemos como JVM (Java Virtual Machine).

Antes de entrar no que é exatamente a JVM, precisamos saber como as aplicações desenvolvidas em outras linguagens, como C ou Pascal funcionam diante de cada sistema operacional.

Para essas linguagens, o código fonte é compilado de acordo com o sistema operacional, isso se faz necessário pois após a compilação aquela aplicação conversará apenas com aquele determinado sistema operacional.

Nesse cenário teremos um executável da aplicação para Linux, outro para Windows, etc.

A JVM tem o importante papel de traduzir o que a sua aplicação (Java) está requisitando, para  a cada uma das camadas do sistema operacional onde aquela aplicação está rodando.

Isso é feito através do Bytecode, o qual é interpretado pela JVM e após é enviado ao sistema operacional.

O bytecode é composto por uma sequência de instruções para JVM, onde cada uma dessas instruções consiste em Opcode seguido por zero ou mais operadores. O Opcode indica quais medidas a JVM deve tomar.

O número total de opcodes é pequeno o suficiente para que ocupem apenas um byte.

Java é lento…

Hoje, graças às otimizações da JVM, é possível que o Java tenha desempenho similar a linguagens como C, isso possível graças a otimizações como a compilação especulativa, que aproveita o tempo ocioso do processador para pré-compilar bytecode para código nativo.

Além disso, ainda existem outros mecanismo que permitem um desempenho ainda melhor, é o caso do HotSpot.

Trata-se de uma tecnologia que a JVM utiliza para detectar os “pontos quentes” da aplicação (código executado muitas vezes) e, quando a JVM julgar necessário transformar aquilo em linguagem nativa.

O compilador responsável por isso é o JIT - Just inTime Compiler, o compilador que aparece “bem na hora” que você precisa.

Entretanto isso ainda possui algumas desvantagens…  A pré-compilação exige tempo, o que faz com que programas Java demorem um tempo significativamente maior para começarem a funciona

Porém isso não é um grande problema para programas que rodam em servidores e que deveriam ser inicializados “apenas uma vez” (a cada início do SO).

O Java hoje já é utilizado em diversas aplicações de grande escala, como podemos ver no link - Java in Action

Você pode encontrar mais informações sobre a JVM no Ebook VM Spec