A Java Virtual Machine (JVM) é um dropper de nome real quando você está programando em Java. Ao contrário do que o nome indica, a Java Virtual Machine também pode ser encontrada em relação a outras linguagens de programação.
Em geral, não é necessário saber o que é a Java Virtual Machine, ou mesmo o que ela faz, para poder programar em Java. Por outro lado, familiarizar-se com o funcionamento interno de uma máquina ajuda a aumentar sua compreensão e percepção geral.
Este artigo aborda a ideia da Java Virtual Machine, o que ela faz por você e alguns dos prós e contras mais importantes. Embora eu tenha tentado simplificar, e definitivamente há literatura mais avançada sobre o assunto, uma compreensão rudimentar de Java e programação é esperada.
Idiomas de Alto Nível
A semântica de uma linguagem de programação é projetada para estar próxima de nossa linguagem natural, permanecendo concisa e fácil de interpretar para uma máquina. Como você provavelmente sabe, a linguagem de programação é totalmente diferente do código de máquina, o conjunto de instruções que um computador usa para construir e executar um programa. Isso nós chamamos de linguagens de alto nível ; um ou vários níveis de abstração do código da máquina.
Antes de poder executar, o código de alto nível deve primeiro ser interpretado. Um monte de interfaces de programação compilar com antecedência ( compilação AOT ) para uma plataforma específica. Isso torna o programa mais eficiente em tempo de execução, mas muito menos compatível com diferentes plataformas. Java, por outro lado, trabalha com uma linguagem intermediária chamada bytecode Java e a Java Virtual Machine .
JVM e Java Bytecode
Quando o projeto Java é construído, ele converte o código-fonte (contido nos arquivos de origem * .java) em código de bytes Java (na maioria das vezes contido em arquivos * .class). Isso leva seu código de alto nível um passo mais próximo do código da máquina, mas ainda não chegou lá. Este bytecode é uma coleção de instruções compactas; mais fácil para uma máquina interpretar, mas menos legível.
Quando você executa um aplicativo Java em seu computador, celular ou qualquer outra plataforma ativada por Java, você basicamente passa esse bytecode Java para a Java Virtual Machine. O interpretador na Java Virtual Machine geralmente começa a compilar todo o bytecode em tempo de execução, seguindo os princípios da chamada compilação just-in-time . Isso faz com que o típico, embora muitas vezes leve atraso ao abrir um aplicativo Java, mas geralmente melhora o desempenho do programa em comparação com a compilação interpretada .
A principal vantagem deste sistema é o aumento da compatibilidade. Como seus aplicativos são executados em uma máquina virtual em vez de diretamente em seu hardware, o desenvolvedor pode programar e criar seu aplicativo uma vez, que pode ser executado em cada dispositivo com uma implementação da Java Virtual Machine. Este princípio deu origem ao slogan Java: " Escreva uma vez, corra para todos os lugares ".
Pro: Compatibilidade e maior segurança
Além da compatibilidade de código, o Java Virtual Machine vem com outros benefícios. Um dos mais importantes deles é a relativa segurança dos programas Java como resultado da Java Virtual Machine. Segurança, o que significa que um programa em execução em uma máquina virtual tem muito menos probabilidade de interromper o sistema operacional do usuário, ou corromper arquivos de dados, se ocorrerem erros.
Con: Implementações e Depuração Diferentes da JVM
Uma das principais críticas à compatibilidade de código e à Java Virtual Machine se deve às diversas implementações do último. Você vê, a Java Virtual Machine não é uma peça de software. A Oracle, proprietária do Java, tem sua implementação da Java Virtual Machine, mas outras pessoas podem fazê-lo se satisfizerem vários requisitos práticos e contratuais.
Essas implementações diferentes significam que seu código pode rodar sem problemas em uma Java Virtual Machine, mas travar e gravar em outra. Embora, na prática, você possa escrever seu código uma vez e executá-lo em todos os lugares, códigos mais complexos às vezes ainda precisam ser depurados em diferentes implementações da Java Virtual Machine para garantir a operação correta.
Você tem alguma experiência em trabalhar com a Java Virtual Machine? Se assim for, há alguma coisa que eu perdi aqui que deveria ser mencionado?
Crédito de imagem: Michaelaw, Dcoetzee