Tudo sobre Java, Java Runtime e aplicativos Java

O que é Java?

Java é uma linguagem de programação orientada a objetos, criada nos anos 90 com o codinome Green Project, por uma equipe de programadores chefiada por James Gosling, na empresa Sun Microsystems.

Naquela época, o que existia no mercado de desenvolvimento eram aplicações de arquitetura cliente servidor, onde cada aplicação era executada em um servidor isolado, ou cluster de servidores, e principalmente, em um ambiente desktops e um terminal ou interface de acesso à aplicação remota.

A proposta do Java era ser uma linguagem multi plataforma, que permitisse reaproveitar o mesmo código em ambientes operacionais distintos como: celulares, desktops, servidores, automóveis, televisores entre outros.

Dessa forma, a linguagem não poderia ser compilada, porque para isso, são necessárias dependências de plataforma, assim, o Java foi concebido como linguagem de compilação abstraída, que precisa de um componente que faça intermédio entre o código desenvolvido e a versão do sistema operacional.

O que é uma Máquina Virtual?

A Máquina virtual é uma representação fiel de uma máquina física.

Podemos estabelecer que a máquina virtual é uma máquina guest, e a máquina física que hospeda esse guest, é o host.

Um host pode executar inúmeras máquinas virtuais simultaneamente sem uma depender da outra.

Em linguagens de programação como C e C++, o código é primeiramente compilado para uma plataforma específica, elas são conhecidas como Linguagens Compiladas.

Por outro lado, linguagens de programação como Python, Perl, Java Script e VB Script, são interpretadas diretamente, sem a necessidade de compilação. Elas são conhecidas como Linguagens Interpretadas.

O Java combina essas duas estratégias, uma linguagem pré compilada e uma interpretada.

O código em Java é inicialmente compilado em um bytecode para gerar o arquivo de classes, e somente após isso, ele é interpretado pela Java Virtual Machine, em uma respectiva plataforma ao qual a JVM está rodando.

Muito semelhante a Máquina Virtual, a JVM cria espaços isolados no host. Isso garante independência do código para a plataforma que está executando, e esses espaços, podem ser usados para executar inúmeros programas Java.

O que é uma Máquina Virtual?

A Java Virtual Machine (JVM) é responsável por executar a maior parte das aplicações Java ao redor do mundo, desde o seu lançamento, ela criou diversas facilidades e bibliotecas para facilitar a vida do desenvolvedor, atualmente a JVM encontra-se na 8ª versão.

A JVM garante interoperabilidade entre tipos de servidores e gerenciamento de recursos como: memória, threads e linking. Com esta facilidade, o desenvolvedor não se preocupa em gerenciar recursos de memória, linking e dependências de bibliotecas.

Desafios da Java Virtual Machine (JVM)?

Quando falamos em ambientes de aplicações atualmente, basicamente estamos falando de containers, kubernetes, API, build pipeline e etc.

Essa é a nova cultura adotada pelas empresas ao redor do mundo “Cloud Native”.

Migrar uma aplicação legada Java, que antes executava em um servidor JBoss ou wildfly para o ambiente de containers funciona, porém não foi para isso que o Java foi criado.

Será um navio sendo empurrado por um propulsor pequeno.

Nas palavras do desenvolvedor, quando tratamos um ambiente ágil de desenvolvimento ou até mesmo DevOps, escrever códigos e fazer builds e mais builds durante um único dia, não fica legal com o Java legado, isso porque o processo de build é bastante demorado e carregado.

Por uma característica da JVM, que possui um recurso de desalocação de memória chamado Garbage Collector, que marca um objeto na memória que não esteja mais sendo referenciado pela aplicação e depois limpa o espaço na memória, essa atuação em uma máquina virtual com JBoss é extremamente importante para a manutenção da memória, porém em um container, isso não faz sentido, o container é efêmero e se ele tiver com pouca memória, o kubernetes irá matá-lo.

Não podemos dizer que a JVM está com os dias contados, porém novas tecnologias com maior aderência e apelo Cloud Native terão espaço maior de utilização. O que faz o Garbage Collector: ele marca um objeto na memória que não esteja mais sendo referenciado pela aplicação e depois limpa o espaço na memória.