O que é uma Máquina Virtual Java?

Felizmente, você nunca tem que escrever ou decifrar bytecode Java. Escrevendo bytecode é o trabalho do compilador. Decifrar bytecode é o trabalho do Java Virtual Machine.

Geralmente, os computadores não executar instruções de bytecode Java. Em vez disso, cada tipo de processador do computador tem seu próprio conjunto de instruções executáveis, e cada sistema operacional do computador usa as instruções do processador de forma ligeiramente diferente.

"A máquina virtual Java é executado o código (e código Java de outras pessoas) no seu computador."
-- Barry Burd, Java For Dummies, 6ª Edição

listagens Exemplo Java

Aqui está uma situação hipotética: Imagine que você executar o sistema operacional Linux em um computador que possui um processador Pentium de idade. Seu amigo roda Linux em um computador com um tipo diferente de processador - um processador PowerPC. (Na década de 1990, Intel Corporation fez processadores Pentium e IBM fez processadores PowerPC.)

Este anúncio contém um conjunto de instruções para mostrar Olá Mundo! no ecrã do computador. As instruções de trabalho em um processador Pentium executando o sistema operacional Linux.

.datamsg: .ascii "Olá, mundo n" = len. - Msg.text.global _start_start: movl $ len,% edxmovl $ msg,% ecxmovl $ 1,% ebxmovl $ 4,% eaxint $ 0x80movl $ 0,% ebxmovl $ 1,% eaxint $ 0x80

Aqui está outro conjunto de instruções para mostrar Olá Mundo! na tela. As instruções neste trabalho de listagem em um processador PowerPC rodando Linux.

.datamsg: .string "Olá, mundo! n" = len. - _start_start Msg.text.global: li 0,4li 3,1lis 4, msg @ haaddi4,4, msg @ lli 5, lenscli 0,1li 3,1sc

As instruções aqui funcionar sem problemas em um processador Pentium. Mas estas instruções nada a um processador PowerPC dizer. Da mesma forma, outras instruções correr muito bem em um PowerPC, mas essas mesmas instruções são rabiscos completo a um computador com um processador Pentium. Então software PowerPC do seu amigo pode não estar disponível no seu computador. E software do seu computador Intel pode não ser executado em tudo no computador do seu amigo.

Agora vá para a casa de seu primo. o computador de seu primo tem um processador Pentium (como a sua), mas o computador de seu primo executa o Windows em vez de Linux. O que faz o computador de seu primo fazer quando você alimentá-lo com o código na Listagem Pentium 2-3? Ela grita, "Não é uma aplicação Win32 válida" ou "Windows não pode abrir este arquivo." Que bagunça!

O que é bytecode Java?

bytecode Java cria a ordem de todo este caos. bytecode Java é algo como o código nas Listagens 2-3 e 2-4, mas bytecode Java não é específico para um tipo de processador ou a um sistema operacional. Em vez disso, um conjunto de instruções de bytecode Java é executado em qualquer computador.

Se você escrever um programa Java e compilar esse programa Java em bytecode, então seu computador pode executar o bytecode, computador de seu amigo pode executar o bytecode, supercomputador da sua avó pode executar o bytecode, e com alguma sorte, seu celular ou tablet pode executar o bytecode.

Com o Java, você pode ter um arquivo de bytecode que você criou com um computador com Windows, copie o bytecode para sabe-se lá que tipo de computador, e depois executar o bytecode com nenhum problema em tudo. Essa é uma das muitas razões pelas quais Java tornou-se popular tão rapidamente. Esta característica marcante, que lhe dá a capacidade de executar código em muitos tipos diferentes de computadores, é chamado portabilidade.

O que o Java Virtual Machine fazer?

O que torna bytecode Java tão versátil? Esta universalidade fantástica apreciado por programas Java bytecode vem do Java Virtual Machine. O Java Virtual Machine é uma dessas três ferramentas que você deve ter em seu computador.

Imagine que você é o representante do Windows para o Conselho de Segurança das Nações Unidas. (Veja a figura.) O representante Macintosh está sentada à sua direita, eo representante do Linux está à sua esquerda. O ilustre representante de Java está no pódio. O representante Java está falando em bytecode, e nem você nem seus colegas embaixadores (Mac e Linux) compreender uma palavra de bytecode Java.

Mas cada um de vocês tem um intérprete. Seu intérprete traduz de bytecode para o Windows enquanto o representante Java fala. Outro intérprete traduz de bytecode para Macintosh-ese. E um terceiro intérprete traduz bytecode em Linux falar.

Pense no seu intérprete como um embaixador virtual. O intérprete não representa realmente o seu país, mas o intérprete executa uma das tarefas importantes que um verdadeiro embaixador executa.

O intérprete ouve para bytecode em seu nome. O intérprete faz o que você faria se sua língua nativa foram bytecode Java. O intérprete finge ser o embaixador do Windows, e senta-se através do discurso bytecode chato, absorvendo cada palavra e processamento de cada palavra de uma forma ou outra.

Você tem um intérprete - um embaixador virtual. Da mesma forma, um computador com Windows gere o seu próprio software de interpretação de bytecode. Esse software é o Java Virtual Machine.

Uma reunião imaginária do Conselho de Segurança da ONU.
Uma reunião imaginária do Conselho de Segurança da ONU.

A Java Virtual Machine é um proxy, um garoto de recados, um intermediário. O JVM serve como um intérprete entre bytecode run-em qualquer lugar do Java e próprio sistema do seu computador. Enquanto ele é executado, o JVM anda seu computador através da execução de instruções de bytecode.

O JVM examina seu bytecode, pouco a pouco, e executa as instruções descritas no bytecode. O JVM interpreta bytecode para o seu sistema Windows, Mac, ou sua caixa de Linux, ou por qualquer tipo de computador que você está usando. Isso é uma coisa boa. É o que faz programas Java mais portátil do que os programas em qualquer outra língua.

menu