Olá Pessoal, tudo bom?
No artigo de hoje iremos descrever brevemente sobre a arquitetura da Linguagem Java. Essa arquitetura irá puxar alguns conceitos sobre arquitetura de sistemas operacionais, assim termos desconhecidos podem surgir no contexto desse artigo. Peço nesses casos que me envie comentários a respeito desses termos, para que eu possa complementar o artigo e responder suas duvidas.
Arquitetura da Linguagem Java
É muito simples e cômodo pensar que a Linguagem Java está restrita apenas aos códigos desenvolvidos pelos milhares de programadores Java espalhados pelo mundo. Na verdade esse pensamento é muito pequeno se formos pensar no leque de componentes estruturais que existem dentro de uma linguagem de programação. Observe a Figura 01, na qual descreve os componentes básicos de uma arquitetura da linguagem em sua combinação:
Como é possível perceber, existem quatro componentes básicos:
- Código Fonte
- Formato de arquivo .class
- Java API (Application Programming Interface)
- JVM (Java Virtual Machine)
É importante observar que para cada Sistema Operacional existe uma JRE (Java Runtime Environment) própria. Deixe isso guardado em sua mente. Cada um desses componentes básicos torna a Arquitetura da linguagem Java única. Assim iremos brevemente descrever cada um desses pontos abaixo.
Código Fonte
Esse componente da arquitetura é o código desenvolvido por você, desenvolvedor Java. Necessariamente esse código necessita ser feito com a sintaxe da linguagem Java?
A resposta é NÃO. Visto que hoje existem muitas linguagens derivadas que se utilizam da arquitetura Java como Groovy e Scala que são excelente exemplos de linguagens derivadas que se utilizam do restante dos componentes da arquitetura ((Artigo Conhecendo as Principais Linguagens para JVM – MundoJ – Edição 42 – Link Artigo))).
O Formato de arquivo .class
A linguagem de programação C utiliza um compilador para gerar um programa executável para uma determinada plataforma. Assim ao gerar esse programa executável para a plataforma Linux, o programa somente poderá ser executado nesta plataforma; Se for necessário rodar em Windows uma nova compilação para essa plataforma deverá ser realizada para gerar outro executável que somente funcionará no Windows.
Esse tipo de problema não ocorre dentro da linguagem Java, pois a definição do formato .class ajudou a estabelecer uma independência de plataformas, pois não é o programa Java criado pelo desenvolvedor que precisa ser compilado para uma determinada plataforma, mas a Java Runtime Environment que é criada utilizando funcionalidades próprias de cada plataforma. Isso é um fator muito importante, pois permitiu que a linguagem Java pudesse cumprir sua premissa de “Write Once, Run Everywhere”, ou seja, a premissa de escrever uma vez o código e rodar este em qualquer plataforma. Esse formato de arquivo também é conhecido como Byte Codes, o qual é importante não confundir com linguagem de máquina (Assembly), visto que quem gera esse é a JVM.
Aqui é necessário uma observação sobre a estrutura de compilação da linguagem Java. Essa estrutura possui um comportamento hibrido, ou seja, existe uma compilação do programa Java em arquivos .class e depois existe uma interpretação desses arquivos .class através da JVM que está localizada dentro da JRE. Assim o programa Java é meio compilado, meio interpretado. Isso é motivo de discórdia e discussões entre desenvolvedores de outras plataformas com os desenvolvedores Java principalmente no conceito de performance. Não entrarei no mérito aqui, pois desde 2002 desenvolvo com a linguagem Java. Mas não sou xiita, assim com provas argumentativas posso aceitar que outras linguagens podem sim superar a performance do Java. 🙂
Todo arquivo .class na verdade é um stream de bytes de 8 bits. Ao gerar esse arquivo, o compilador irá criar vários códigos seriais para cada arquivo gerado. Isso é muito importante pois caso alguém mal intencionado modifique os arquivos .class após a compilação esses códigos se tornam errados, aumentando a segurança da linguagem. ((ClassFile Structure – Documentação Oficial Oracle – link))
Para realizar a compilação dos arquivos java, basta utilizar o comando javac. Esse comando irá gerar arquivos .class correspondentes para cada tipo (Classe/Enum/Interface) que existir dentro do arquivo .java. Os arquivos gerados possuem o seguinte formato:
- Caso o tipo seja público, ou seja, o tipo principal dentro do arquivo .java (top class), será gerado um arquivo .class com o mesmo nome.
- EX: Carro.java ==> Carro.class
- Caso o tipo será uma classe interna, não sendo o tipo principal dentro do arquivo .java (inner class), será gerado um arquivo .class que contém um cifrão ($) no nome.
- EX: Carro.java que contém uma inner class chamada Volante ==> Carro$Volante.class
Outro erro que pode acontecer ao compilar é gerar um arquivo em uma determinada versão da JVM, por exemplo a 7.0 e querer rodar os arquivos .class na 8.0. Não irá dar certo, gerando um java.lang.UnsupportedClassVersion ao executar o seu aplicativo.
Observação: É possível decompilar um arquivo .class utilizando decompiladores. Em um futuro artigo apresento essa ferramenta que pode ser útil para utilização em sistemas legados em que o código fonte foi perdido.
Java APIs
As APIs ou Application Programming Interfaces são códigos previamente escritos e compilados que estão dentro de packages que possuem responsabilidades similares. Existem inúmeras APIs dentro da linguagem Java, mas existem três plataformas principais:
- JAVA SE – Java Platform, Standard Edition: Essa plataforma contém o core (núcleo) das classes Java e algumas classes que compõem a camada gráfica mais básica do Java
- JAVA EE – Java Platform, Enterprise Edition: Essa plataforma contém um conjunto de classes Java para desenvolvimento de aplicações comerciais (Enterprise), como Servlets, Java Server Pages, Java Beans entre outros pacotes.
- JAVA ME – Java Platform, Micro Edition: Essa plataforma fez o Java retornar ao seu primórdios. Pois provê um ambiente de execução otimizado para produtos com poder de processamento limitado, como Aparelhos de Blu-rays e Smart TVs. Um adendo sobre essa plataforma é que está perdendo muito espaço para aplicações Android, que possui muitos recursos já otimizados para a utilização pelos desenvolvedores.
Essas plataformas possuem milhares de classes e centenas de pacotes. Não é possível descrever todos os aspectos de cada plataforma, assim se surgirem duvidas sobre assuntos pontuais por favor envie um contato requisitando isso que colocarei na minha lista de artigos 🙂
Java Virtual Machine
Por fim o último aspecto da arquitetura Java está na máquina que faz com que tudo isso seja possível. Essa máquina chamada JVM é uma máquina virtual, ou seja, ela simula um computador real, assim possui vários aspectos relacionados a arquitetura de uma CPU. Infelizmente analisar a JVM demanda mais do que apenas esse pedaço de artigo, dessa forma estaremos dissecando um pouco melhor em um futuro artigo, não perca!
finnaly{
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Leave a Reply