A máquina Java Virtual gera 0s e 1s?

0

Eu sinto muito, esta é uma questão de informática de nível muito básico. A Java Virtual Machine gera 0s e 1s ou gera código de linguagem assembly? Se ele gerar o código da linguagem assembly, o processador tem um assembler anexado a ele que o converte em 0s e 1s? Ou se ele gera 0s e 1s, o processador precisa de um montador? Se sim, para quê?

    
por Foo 06.08.2014 / 03:34

2 respostas

2

O compilador Java (não a JVM) usa o código-fonte Java (que é essencialmente apenas 0s e 1s, mas um conjunto específico de 0s e 1s que pode representar informações fáceis para humanos para lidar com, texto legível) e compila para bytecode Java , que é 0 e 1 com um significado diferente.

O bytecode Java é conceitualmente como "assembler", exceto por serem instruções independentes de plataforma que devem ser interpretadas pela máquina virtual Java . A JVM atua como um "tradutor" entre o bytecode Java e o bytecode nativo (isto é, instruções de máquina para o hardware real em que está sendo executado) - conceitualmente o mesmo que, digamos, um emulador da Nintendo. É isso que permite que o Java compilado seja executado em qualquer plataforma.

Portanto, para responder à sua pergunta diretamente: A JVM não gera bytecode Java; o compilador Java faz, e a JVM interpreta o bytecode e "faz as coisas acontecerem".

No entanto, nos tempos modernos, as JVMs avançadas fazem mais do que apenas interpretar - a tecnologia "HotSpot" de que você pode ter ouvido, por exemplo, permite que a JVM determine dinamicamente quais partes de seu bytecode Java estão sendo executadas com freqüência poderia se beneficiar de uma aceleração) e, em seguida, pegar essas partes e traduzi-las para bytecode nativo completo em tempo real (para que o bytecode Java original não seja mais interpretado e o novo bytecode nativo mais rápido seja executado diretamente). Tudo isso acontece de forma transparente para o seu programa Java. Há muito tempo, Java costumava receber muitas críticas por ser "lento", mas esses dias acabaram com o advento do HotSpot e técnicas similares.

Então, de certa forma, as JVMs modernas do geram "0s e 1s", pois geram código nativo adicional a partir das instruções de entrada de Java; mas seja cauteloso ao se referir a dados como "0s e 1s" - todo pedaço de dados digitais é "0s e 1s" (geralmente organizado em grupos de 8 dígitos binários chamados a "byte ), do código de máquina para programar código-fonte para texto para imagens para MP3s para qualquer coisa.

Você pode encontrar um bom resumo de como a JVM funciona aqui .

Para especificações muito concretas da linguagem Java, bytecode Java e como o compilador e a máquina virtual são obrigados a se comportar, tanto a especificação de linguagem quanto a de máquina virtual podem ser encontradas aqui .

    
por 06.08.2014 / 03:49
0

Ele gera java bytecode , que é um conjunto especial de instruções apenas para a JVM. É comparável, mas não é o mesmo que código de máquina nativa (zeros e uns).

Veja aqui: Bytecode de Java (Wikipedia) (role para baixo até a seção Exemplo).

    
por 06.08.2014 / 03:37

Tags