JVM - Java é Verboso Mesmo? Parte I
Tags: java, beginners, jvm
Published: 2023-01-09 17:07:28

A resposta de muitos devs mais seniores é: depende!
O caminho até você se tornar capaz de deixar de ser um usuário da linguagem e passar a ser um criador dela não é um caminho simples ou pequeno e acima de tudo **não haverá atalhos**; e isso vale para qualquer linguagem de programação...
Por muito anos eu fui/sou usuário do Java, mas essa condição começou a me incomodar e a partir disso, eu tomei a decisão de dissecar o que eu puder dessa linguagem e assim, entender ela melhor, conseguir explicar conceitos aos que desejam entrar nesse universo que é o Java, aprender e juntos conseguirmos construir melhores produtos usando essa linguagem que está presente nos mais variados sistemas produtivos ao redor do globo.
[No artigo anterior](https://dev.to/eguadorodrigo/e-a-certificacao-hein-3p6a) falamos um pouco sobre o cenário macro - do que na minha visão é importante sabermos primeiro - antes de cair matando na linguagem sem nenhum preparo mínimo que seja...
e hoje vamos falar um pouco do primeiro ponto: **a JVM**.
Na Alura, você encontra essas e outras explicações no curso [Java Primeiros Passos](https://cursos.alura.com.br/course/java-primeiros-passos), vamos lá?
A JVM ou por seu nome completo Java Virtual Machine nasceu pela necessidade de haver um artifício comum entre os dispositivos da época e que pudesse - independente do dispositivo - se comunicar e fazer com que tais equipamentos operassem de forma a termos um único código fonte.
Não vou entrar no detalhe da história e nomes dos responsáveis porque esse não é o foco, o foco aqui é apresentar de maneira mais didática possível o funcionamento do Java no dia-a-dia do usuário ou desenvolvedor, então bora seguir!

Vamos então fazer um primeiro exemplo de código, que apenas imprime uma mensagem no terminal do usuário com o texto "Hello Programa".

```
public class Programa{
	public static void main(String[] args){
		System.out.println("Hello Programa");
	}
}
```

Podemos ver esse diálogo
_- O que você usa para escrever esse código, Rodrigo?_ 
_- Ah...qualquer editor de texto. Se tu usa Windows, o notepad, se usas o Linux, qualquer mousepad da vida, se tu usa o Mac (eu não sei o nome, não tenho Mac hehehe), mas você entendeu, né?! Desde que seja um editor de texto, tá valendo!_

Show demais né? lembra que eu falei da necessidade de ser possível usar Java **independente do dispositivo**? Então, sistemas operacionais também vai nessa pegada ai!! 
_- Então se eu escrevo um código num sistema ele vai valer pra outro?_ **SIM**, graças a JVM isso é possível! E sendo assim, vamos dar uma olhada em como isso acontece por baixo dos panos:


![Imagem com 4 retangulos mostrando a segregação da linguagem Java - Nome do arquivo, nome da classe, nome do método principal, código a ser executado. Abaixo dessa imagem, outro retangulo mostrando um código chamado Bytecode que representa o que será executado no que foi descrito anteriormente em linguagem que a JVM entenderá.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/scjyda6snmfvousg1hf1.png)

Na imagem acima temos o nosso código fragmentado e particionado para exemplificar os pedaços que compõem o arquivo Programa.java e são eles:

* Nome do arquivo: Programa.java;
* Declaração de classe: public class Programa{};
* Declaração do ponto de entrada principal: public static void main(String[] args){}
* Trecho para execução: System.out.println("Hello Programa");
* Classe compilada: Programa.java ao ser compilada torna-se Programa.class

Ali vemos dois pedaços, um acima, que escrevemos e queremos executar, ou seja, a linguagem humana e abaixo a linguagem compilada ou Bytecode como é conhecida, que é a linguagem que a JVM entenderá para enviar em seguida aos dispositivos para quaisquer execuções que sejam possíveis dado o dispositivo alvo.

Vamos em frente, num terminal qualquer você poderá executar o comando **javac** para compilar seu arquivo e obter o Programa.class: 

```
javac Programa.java
```

Mas ao executar o comando acima, você pode topar como o seguinte problema:

```
/bin/sh: javac: not found
```

e o desespero vir: _MAS O QUE HOUVE???? TÁ TUDO IGUAL AO QUE TU FEZ ALI EM CIMA, LINHA POR LINHA!!_

E pode ser que esteja mesmo, daí em algum momento pode surgir o questionamento:
_- tá, mas então como eu executo esse código, bicho?_ 

E essa resposta ficará para a parte dois desse artigo sobre a JVM, nos vemos lá, abraços!

ps: pode mandar perguntas ou me seguir nas redes!! #VamoJunto