# Java (plataforma de software)

Java é o ambiente computacional, ou plataforma, criada pela empresa estadunidense Sun Microsystems, e vendida para a Oracle depois de alguns anos. A plataforma permite desenvolver programas utilizando a linguagem de programação Java. Uma grande vantagem da plataforma é a de não estar presa a um único sistema operacional ou hardware, pois seus programas rodam através de uma máquina virtual que pode ser emulada em qualquer sistema que suporte a linguagem C++.

## A plataforma

O universo Java é um vasto conjunto de tecnologias, composto por três plataformas principais que foram criadas para segmentos específicos de aplicações:
* Java SE (Java Platform, Standard Edition). É a base da plataforma. Inclui o ambiente de execução e as bibliotecas comuns.
* Java EE (Java Platform, Enterprise Edition). A edição voltada para o desenvolvimento de aplicações corporativas e para internet.
* Java ME (Java Platform, Micro Edition). A edição para o desenvolvimento de aplicações para dispositivos móveis e embarcados.
Além disso, pode-se destacar outras duas plataformas Java mais específicas:
* Java Card. Voltada para dispositivos embarcados com limitações de processamento e armazenamento, como smart cards e o Java Ring.
* JavaFX. Plataforma para desenvolvimento de aplicações multimídia em desktop/web (JavaFX Script) e dispositivos móveis (JavaFX Mobile).

## Tecnologias Java

A plataforma Java é constituída de um grande número de tecnologias, cada uma provê uma porção distinta de todo o ambiente de desenvolvimento e execução de software. Os usuários finais, tipicamente, interagem com a máquina virtual Java (Java Virtual Machine, ou JVM) e um conjunto padrão de bibliotecas de classe.
Existe um grande número de maneiras de se utilizar uma aplicação Java, incluindo applets embutidas em páginas web, aplicativos de uso geral em desktops, aplicativos em aparelhos celulares e em servidores de aplicações para Internet(Apache Tomcat, Glassfish, JBoss etc).
Os desenvolvedores de aplicações em Java utilizam um conjunto de ferramentas de desenvolvimento, o JDK.

## Ambiente de execução Java

Um programa escrito para a plataforma Java necessita de dois componentes para ser executado: a máquina virtual Java, e um conjunto de bibliotecas de classe que disponibilizam um série de serviços para esse programa. O pacote de software que contém a máquina virtual e esta biblioteca de classes é conhecido como JRE (Java Runtime Environment).

### Java Virtual Machine

O coração da plataforma Java é o conceito de um processador "virtual", que executa os programas formados por bytecodes Java. Este bytecode é o mesmo independentemente do hardware ou sistema operacional do sistema em que o programa será executado. A plataforma Java disponibiliza um interpretador, a JVM, que traduz, em tempo de execução, o bytecode para instruções nativas do processador. Isto permite que uma mesma aplicação seja executada em qualquer plataforma computacional que possua uma implementação da máquina virtual.
Desde a versão 1.2 da JRE, a implementação da Sun da JVM inclui um compilador just-in-time (JIT). Com este compilador todo o bytecode de um programa é transformado em instruções nativas e carregado na máquina virtual em uma só operação, permitindo um ganho de desempenho muito grande em comparação com a implementação anterior, onde as instruções em bytecode eram interpretadas uma por vez. O compilador JIT pode ser projetado de acordo com a plataforma ou hardware de destino, e o código que ele gera pode ser otimizado com base na observação de padrões de comportamento dos programas.
Desde a primeira versão, este ambiente de execução vem equipado com gestão automática de memória, realizada por um algoritmo coletor de lixo que liberta o programador das tarefas de alocação e libertação de memória, fonte de muitos erros de programação.
A plataforma Java não é a primeira plataforma baseada em uma máquina virtual, mas é de longe a mais conhecida e a que alcançou maior sucesso. Anteriormente esta tecnologia era utilizada na criação de emuladores para auxílio ao projeto de hardware ou de sistemas operacionais. A plataforma Java foi desenhada para ser implementada inteiramente em software, enquanto permitindo a sua migração de maneira fácil para plataformas de hardware de todos os tipos.

### Bibliotecas de classes

Na maioria dos sistemas operacionais modernos, um corpo formado por código reusável é organizado e disponibilizado para simplificar o trabalho do programador. Este código encontra-se, normalmente, na forma de bibliotecas dinâmicas que a aplicação utiliza durante a sua execução. Como a plataforma Java não é dependente de qualquer sistema operacional, as aplicações não podem depender das bibliotecas destes sistemas. Ao contrário, a plataforma Java disponibiliza um grande conjunto padronizado de bibliotecas de classe, que contém praticamente o mesmo número de funções encontradas nos sistemas operacionais modernos.
Uma classe de biblioteca Java serve a três propósitos dentro da plataforma Java. Como outras bibliotecas padrão, elas disponibilizam ao programador um conjunto de funções bem conhecidas que realizam tarefas comuns, como a manutenção de listas de elementos ou manipulação de strings. Em adição, a biblioteca contém uma interface para tarefas que dependem do hardware e do sistema operacional. Tarefas como acesso a rede e a arquivos são altamente dependentes das capacidades nativas do ambiente. As bibliotecas java.net e java.io implementam o código necessário internamente, e disponibilizam uma interface padrão para que as aplicações Java possam executar estas tarefas. Finalmente, se alguma plataforma não suportar alguma função que uma aplicação Java necessita, as bibliotecas implementam esta funcionalidade usando os recursos disponíveis, ou disponibilizam um meio consistente para que a aplicação verifique a presença de determinada funcionalidade.

## Linguagens

A palavra Java usualmente é uma referência à linguagem de programação Java, que foi a primeira linguagem criada pela Sun Microsystems para a JVM. A segunda linguagem criada pela Sun Microsystems para a JVM é chamada de Groovy, uma linguagem mais dinâmica, inspirada em linguagens como Python, Ruby e Smalltalk. Também existem implementações para a linguagem Python, a Jython, e para a linguagem Ruby, a JRuby.

## Plataformas similares

O sucesso da plataforma Java e o seu conceito write once, run anywhere (escreva uma vez, execute em qualquer lugar) levaram a outros esforços similares. O mais notável destes esforços é a plataforma .NET, da Microsoft, que utilizou muitos dos conceitos e inovações da plataforma Java sem, contudo, implementar os recursos de portabilidade entre sistemas operacionais e plataformas que a plataforma Java possui.