Por que a linguagem independente da plataforma Java?

Publicados: 2021-02-08

Índice

Introdução

Java ganhou enorme popularidade entre todas as outras linguagens de programação desde o seu nascimento. E a razão para uma resposta tão imensa é a capacidade de fornecer recursos exclusivos. A sintaxe do Java será quase semelhante ao c++, mas oferece recursos muito distantes do que o c++.

A disponibilidade da programação orientada a objetos (OOP) fez com que java se destacasse de todas as outras linguagens restantes na época. Java foi desenvolvido para usar POO em seu núcleo e foi uma das razões para ser a linguagem mais usada. Este conceito aumenta a reutilização, a execução perfeita. Neste momento, pode haver uma pergunta em nossa mente “por que devemos usar um objeto?”.

Objetos em Java são semelhantes a estruturas em linguagem c, onde estamos vinculando métodos e variáveis ​​semelhantes. Junto com isso, Java também fornece abstração, encapsulamento, herança e polimorfismo que encoraja o usuário a implementar objetos.

Java desempenha um papel dominante em muitos domínios, como desenvolvimento de aplicativos, desenvolvimento web, construção de ferramentas de software. Ele também possui um rico número de bibliotecas, o que facilita as coisas. Além disso, a disponibilidade do IDE desempenha um papel crucial para atrair a atenção dos desenvolvedores. IDEs como Eclipse, IntelliJ, NetBeans são frequentemente usados ​​por muitos desenvolvedores.

Tudo bem, agora vamos à nossa discussão.

Mas antes de tudo, o que significa independência de plataforma?. Para obter uma resposta a essa pergunta, precisamos saber o que acontece quando compilamos um código.

Compilando um código

Sempre que escrevemos um código, seguimos as sintaxes de uma linguagem de programação, que teria uma boa legibilidade. E contém poucas palavras, frases, nomes de variáveis, nomes de métodos, etc. Todas essas coisas são consideradas textos legíveis e compreensíveis por humanos.

Assim, uma máquina usa um compilador para converter o código-fonte em um código legível por máquina, que também é conhecido como linguagem de nível de máquina. O compilador constrói o código em nível de máquina em uma apresentação específica, de modo que possa ser facilmente entendido pela CPU e, portanto, executá-lo sem problemas.

Essa construção de linguagem em nível de máquina difere de acordo com cada linguagem de programação e cada sistema operacional. Por exemplo, c/c++ gera um arquivo .exe que não é o mesmo para duas máquinas se elas estiverem sendo executadas em um sistema operacional diferente.

E aqui surge o problema!

Quando uma linguagem de nível de máquina difere em cada sistema operacional, não podemos executar um código compilado em uma máquina diferente em uma nova máquina, a menos que ambos os sistemas operem no mesmo sistema operacional. Isso parece uma porcaria para muitos programadores e desenvolvedores.

Mas Java torna as coisas mais fáceis, e java tem uma solução para isso. Vamos começar.

Java é independente de plataforma

Então, o que acontece quando compilamos código em java?

Sempre que inserimos uma declaração “javac filename.java” ou compilamos um código em java, javac compila o código. E cria um código intermediário chamado Byte Code.

É aqui que o java faz a diferença entre todas as diferentes linguagens de programação. Ele cria um arquivo .class, que é considerado como código de byte. Considerando que linguagens como c/c++ criarão um código executável nativamente quando forem compiladas e, portanto, as tornarão dependentes da plataforma.

Espere, é muito cedo para comemorar. Este código de byte não é executável. Precisamos de um tradutor para executar este código de byte. E a JVM faz esse trabalho. Geralmente, a JVM reside na memória principal do nosso computador. A Java Virtual Machine atua como um interpretador e, em seguida, executa o código de byte gerado pelo javac.

E agora que terminamos, nosso código é executado com sucesso.

Então, como o java vai gerenciar tudo sozinho?

E a resposta seria, é por causa da JVM. O código de byte gerado pela compilação do código-fonte seria executado em qualquer sistema operacional, mas a JVM presente em uma máquina difere para cada sistema operacional. E é assim que o java é considerado uma linguagem de programação independente de plataforma.

Para entendê-lo corretamente, vamos entender a arquitetura e o funcionamento da JVM.

Arquitetura JVM

A JVM faz parte do ambiente de tempo de execução java e é responsável por converter um arquivo .java em um arquivo .class. Quando compilamos um código java, a JVM chama o método main no código-fonte.

Arquitetura JVM

ClassLoader

É um subsistema na máquina virtual Java. Ele carrega o arquivo .class, verifica se existem exceções e é o motivo de poucas exceções de tempo de execução. E depois de verificar ele aloca a memória para as variáveis ​​e os métodos presentes, atribua valores padrão às variáveis ​​e arrays. Ele também executa os métodos estáticos ou variáveis ​​presentes no código.

Existem 3 carregadores de classe integrados no JVMm, carregador de classe de bootstrap, carregador de classe de extensão, carregador de classe de aplicativo.

Áreas de memória na JVM

Método/Área de Classe

Ele armazena informações como nomes de classes, nomes de métodos, variáveis. É um recurso compartilhado para todos os métodos e variáveis ​​em uma classe.

Pilha

Ele armazena as informações de todos os dados armazenados na área de heap.

Pilha de Idiomas JVM

Ele armazena as informações em blocos também chamados de stack-frames/frames, que armazenam as informações atuais quando há uma chamada de função, armazena variáveis ​​locais, também desempenha um papel dominante no gerenciamento de threads.

Registro de PC

Ele armazena o endereço da instrução que está sendo executada no momento. É útil em uma situação de execução multi-thread.

Pilha de métodos nativos

Ele armazena todas as informações dos métodos nativos usados.

Mecanismo de execução

O mecanismo de execução executará o código de byte e removerá a memória alocada para os objetos inacessíveis ou não referenciados. O interpretador no mecanismo de execução executará o código de byte lendo-o em um fluxo e interpretando linha por linha.

Ele também tem uma parte interessante chamada compilador JIT (Just In Time Compiler), onde ele cria um código executável nativo para métodos, portanto, se houver várias chamadas de função, a JVM não precisará interpretá-lo novamente, em vez disso, usar diretamente o código executável nativo. Portanto, melhora o desempenho da execução.

Interface de método nativo

Esta interface é usada por java para interagir com as aplicações implementadas em diferentes linguagens como C/C++. A interação é bidirecional, onde a JVM pode chamar esses aplicativos ou pode ser chamada por esses aplicativos.

Bibliotecas de métodos nativos

Ele mantém o controle das bibliotecas de idioma nativo, que podem ser usadas pelo mecanismo de execução.

Agora que entendemos a arquitetura da JVM, voltemos à nossa discussão. Portanto, essa JVM é diferente para diferentes sistemas operacionais, mas a saída gerada por essas JVMs será a mesma para o mesmo código de byte fornecido.

Leia também: Ideias e tópicos do projeto Java

Aprenda cursos de desenvolvimento de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Conclusão

Passamos por alguns recursos exclusivos do java, entendemos o que acontece quando compilamos código em linguagens como C/C++, entendemos a diferença entre código executável nativamente e código de byte. Percorremos a explicação de por que o java é considerado uma linguagem independente de plataforma, entendemos que a JVM é a razão por trás da independência de plataforma do java. Demos uma olhada na arquitetura JVM para um melhor entendimento.

Agora que você está ciente do motivo pelo qual o java é independente de plataforma, explore outros recursos exclusivos do java e comece a utilizá-los!

Se você estiver interessado em aprender mais sobre Java, desenvolvimento de software full-stack, confira o Programa PG Executivo do upGrad & IIIT-B em Desenvolvimento de Software Full-stack, projetado para profissionais que trabalham e oferece mais de 500 horas de treinamento rigoroso, 9+ projetos e atribuições, status de ex-alunos do IIIT-B, projetos práticos práticos e assistência de trabalho com as principais empresas.

Quais são as vantagens do Java sobre outras linguagens?

Há muitas vantagens do Java sobre outras linguagens. Vamos começar com a vantagem mais alta, Java é independente de plataforma. O código Java pode ser executado em qualquer plataforma de hardware, sistema operacional e navegador. Ele pode ser executado em qualquer dispositivo. Isso significa que depois de escrever seu aplicativo em Java, você pode executá-lo em qualquer dispositivo. É simples assim! Além disso, depois de escrever seu código, é muito fácil depurar e corrigir bugs. Finalmente, Java é orientado a objetos. Isso significa que você precisa usar programas e códigos menores. Isso tornará seu código mais fácil de trabalhar. Se alguma modificação for necessária, o código será menos propenso a erros. Possui recursos como Multithreading, Memory Management, Platform independent, Security, Virtual Machine ou seja, bytecode, Collection Framework, Garbage Collector, Layered architecture, etc.

Por que Java é independente da plataforma?

Java é independente de plataforma porque usa uma máquina virtual. A linguagem de programação Java e todas as APIs são compiladas em bytecodes. Os bytecodes são efetivamente independentes da plataforma. A máquina virtual cuida das diferenças entre os bytecodes das diferentes plataformas. Os requisitos de tempo de execução para Java são, portanto, muito pequenos. A máquina virtual Java cuida de todos os problemas relacionados ao hardware, de modo que nenhum código precisa ser compilado para um hardware diferente.

O que é coleta de lixo automática em Java?

A coleta de lixo automática é uma técnica de coleta de lixo na qual o coletor de lixo é executado automaticamente, sem que o programador precise escrever código para ele. Em Java, a coleta de lixo é feita colocando a Java Virtual Machine em um modo especial. O coletor de lixo será executado quando vir uma oportunidade para fazê-lo. Alguns coletores de lixo usam uma abordagem stop-the-world e a Java Virtual Machine deve parar de executar o programa para fazer a coleta de lixo. A coleta de lixo não é um conceito fácil, mas uma vez que você a obtém, não há como voltar atrás. E a coleta de lixo do Java é uma das mais fáceis de entender.