JVM por debaixo dos panos #1 - O que é o Java?
Tags: java, jvm, advanced
Published: 2019-09-24 20:28:49

**:coffee: Bem Vindxs à série de artigos sobre Java Virtual Machine!**

# JVM por debaixo dos panos - O que é o java?
> Neste artigo vamos abordar contextualização, acredito que saber da história e de outros vieses é importante antes de partir direto a parte técnica
> O conteúdo é bem extenso e técnico, a meta é deixar o mais objetivo e acessível possivel :relaxed:


## :robot: Os processos de compilamento

* Tudo começa com a história dos computadores de linguagem de alto nível onde o mesmo só entendia _micro instruções_
* sabe o código que você escreve? O seu computador não entende ele, nunca entendeu... sim eles são bem burrinhos!
* Na verdade o seu computador entende o **código executável**
* Vamos pegar como exemplo uma linguagem "antiga", como **Assembly**, veja a arquitetura:

* Basicamente tem um "Hello World", que passa por um tipo de compilador que converte o código em binário 

![compilador antigo](https://i.imgur.com/Ax8hq9a.png)


* **Mas isso é complexo demais, pensa bem... um sistema operacional vai ler apenas o que foi compilado nele, se for rodar esse mesmo código num MACOX por exemplo teria que fazer tudo de novo!!**
* Precisava- se de otimização de processos e tempo 

## :alien: Processo de compilamento em C

* Bastante gente tem o preconceito com C né, mas você sabia que Java foi baseado em C?
* Por que a linguagem C foi revolucionária pra época onde se tornou uma multiplataforma ou seja **tem um compilador para cada Sistema Operacional(SO)**
* O processo de compilamento em C é bem simples, veja na arquitetura:

![compilador em C](https://i.imgur.com/mfA4Bhp.png)

* Vemos que o **código fonte** que eu programo em C ele é levado para dois processos que separadamente irão transformar um **código executável** para cada sistema operacional :D

* Foi à partir dessa ideia de multiplataforma que nasceu o conceito da JVM do java...
> Antes de partimos pra história, o que aprendemos até aqui:
> **Código fonte:** é a sequência de comandos que eu, pessoa programadora escrevo.
> **Código executável:** é a sequência de comandos que o computador entende.
> **Linguagem C é multiplataforma.**
> **Java foi baseado em C**

## :scroll: Um breve história sobre o Java

* 1990: Sun Microsystems criou um projeto liderado pelo James Gosling baseado em C++ com o intuito de criar uma tecnologia onde diferentes dispositivos diferentes pudessem se comunicar entre si.
Até então não existiam microprocessadores então imagina o quão revolucionário seria este projeto!
* e assim formou-se o Green Team que criaram sua própria linguagem o **Green Talk** 
* A linguagem foi rebatizada para **OAK (Carvalho)**
* E assim criou-se o [Star Seven](https://blog.caelum.com.br/tv-digital-java-e-brasil/) 
* 1992: O projeto Star Seven acabou ficando engavetado pois não houveram investimento das empresas, _eu acredito que por ser muito revolucionário_
* O principal core do star seven era interatividade, sendo assim, advinha quem se interessou pela linguagem que foi programado o star seven?
* **Tim Berners-Lee**, o próprio, na época ele estava desenvolvendo o HTML, que tinha como principal função a interatividade com o usuário em tempo real (o que não existia ainda)
* Foi assim que se juntou a gema e a clara (piada ruim 	:woman_facepalming:)
* Assim surgiu o **WebRunner** que permitia INTERATIVIDADE
* Sendo assim agora era só mudar o nome da linguagem pois Oak já existia no mercado, foi quando Gosling reuniu seu grupo e rebatizaram para JAVA, pois é um termo que os americanos têm quando querem café bem forte, **Java Coffee**, já que nós programadores só funcionamos a base do café, nada mais justo
_Essa história do surgimento do nome tem outras versões, nunca saberemos ao certo eu acho, quem sabe um dia eu tenha a oportunidade de falar com alguém que era da Sun Microsystems_

> * Beleza, entedemos a história linda do Java, legal né?
> * Agora só falta entender o por que da JVM...

## :coffee: Compilamento do código com a JVM

* Observe a arquitetura abaixo:
![compilador java](https://i.imgur.com/iLDx4zS.png)

* O código depois de feito passa pelo **Java Compiler ou JavaC** -> Depois disso dentro do **JavaC** o seu código fonte é convertido para Bytecode -> A JVM lê esse Bytecode e converte para um código executável.

* A sacada da JVM é o **BYTECODE**, a linguagem da JVM, possibilitando assim um multiversionamento para qualquer sistema operacional

* E o mais legal de tudo isso é que quando você baixa seu Java na sua máquina a JVM já vem junto, não precisa sair procurando (vem a JVM e mais um monte de outras funcionalidades, vale lembrar).

> Esse conceito de _Write One Run Anywhere_ possibilita que várias outras linguagem rodem na JVM, principalmente às linguagens da modinha

![linguagens que rodam na jvm](https://i.imgur.com/UMoSciF.png)


###### E aqui terminamos a primeira parte introdutóra sobre JVM! Espero que tenha sido de grande valia, prometo postar a parte 2 em breve

## Se você quiser ler esse mesmo artigo, em inglês, vai estar no meu site:http://bit.ly/jvm-under-the-hood-1