Java Virtual Machine (JVM), Difference JDK, JRE & JVM – Core Java (Português)
Java é uma linguagem de programação de alto nível. Um programa escrito em linguagem de alto nível não pode ser executado em qualquer máquina diretamente. Em primeiro lugar, tem de ser traduzida para essa linguagem de máquina em particular. O compilador javac faz isso, ele leva o programa java (.java file containing source code) and translates it into machine code (referred as byte code or .class file).,
Java Virtual Machine (JVM) é uma máquina virtual que reside na máquina real (seu computador) e a linguagem de máquina para JVM é um código byte. Isso torna mais fácil para o compilador como ele tem que gerar código byte para JVM em vez de código máquina diferente para cada tipo de máquina. A JVM executa o código byte gerado pelo compilador e produz a saída. JVM é o único que torna a plataforma java independente.
assim, agora entendemos que a função primária de JVM é executar o código byte produzido pelo compilador., Cada sistema operacional tem uma JVM diferente, no entanto a saída que eles produzem após a execução do Código byte é a mesma em todos os sistemas operacionais. O que significa que o código byte gerado no Windows pode ser executado no Mac OS e vice-versa. É por isso que chamamos java de linguagem independente de plataforma. A mesma coisa pode ser visto no diagrama abaixo:
Então, para resumir tudo: A máquina Virtual Java (JVM) é a máquina virtual que roda sobre a máquina (computador) e executa Java de código de byte., O JVM não entende o código fonte Java, por isso precisamos ter um compilador javac que compile *.ficheiros java para obter *.ficheiros de classe que contêm os códigos de bytes compreendidos pela JVM. JVM faz java portable (escreva uma vez, execute em qualquer lugar). Cada sistema operacional tem uma JVM diferente, no entanto a saída que eles produzem após a execução do Código byte é a mesma em todos os sistemas operacionais.
JVM Arquitetura
Vamos ver como JVM obras:
Carregador de Classe: A classe loader lê .,class file and save the byte code in the method area.
área do método: existe apenas uma área do método numa JVM que é partilhada entre todas as classes. Isto contém a informação de nível de classe de cada um .ficheiro da turma.
Heap: Heap é uma parte da memória JVM onde objetos são alocados. JVM cria um objeto de classe para cada um .ficheiro da turma.
Stack: Stack é também uma parte da memória JVM, mas ao contrário de Heap, é usado para armazenar variáveis temporárias.
registradores PC: isto mantém o controle de qual instrução foi executada e qual delas será executada., Uma vez que as instruções são executadas por threads, cada thread tem um registro de PC separado.
native Method stack: A native method can access the runtime data areas of the virtual machine.
Native Method interface: it enables java code to call or be called by native applications. Aplicações nativas são programas que são específicos para o hardware e OS de um sistema.
recolha de lixo: uma instância de classe é explicitamente criada pelo código java e, após o seu uso, é automaticamente destruída pela recolha de lixo para gestão de memória.,
JVM Vs JRE Vs JDK
JRE: JRE é o ambiente dentro do qual a máquina virtual java funciona. JRE contains Java virtual Machine (JVM), class libraries, and other files excluding development tools such as compiler and debugger.
O que significa que você pode executar o código em JRE, mas você não pode desenvolver e compilar o código em JRE.
JVM: como discutimos acima, o JVM executa o programa usando Classe, bibliotecas e arquivos fornecidos pelo JRE.,
JDK: JDK é um superconjunto de JRE, ele contém tudo o que JRE tem junto com ferramentas de desenvolvimento, como compilador, debugger etc.