Java é uma das poucas linguagens de programação cuja história atravessa várias grandes transformações da informática: eletrónica de consumo, ascensão da Web, aplicações empresariais, open source, smartphones e cloud.
Quando foi apresentada ao público em 1995, a sua promessa ficou resumida num slogan famoso: “Write Once, Run Anywhere”, escrever uma vez e executar em qualquer lugar. Java deu forma prática a essa ambição através de uma combinação duradoura: uma linguagem relativamente acessível, bytecode, a Java Virtual Machine (JVM), gestão automática de memória e uma biblioteca comum.
No entanto, Java não foi concebida para a Web. A sua história começou alguns anos antes num projeto dedicado ao futuro dos dispositivos eletrónicos.
1991: o projeto Green
No início da década de 1990, a Sun Microsystems era sobretudo conhecida pelas estações de trabalho Unix e pela computação em rede. Alguns engenheiros acreditavam, porém, que a próxima vaga incluiria também dispositivos inteligentes de consumo: televisores interativos, descodificadores e equipamentos domésticos.
Em 1991, a Sun lançou o Green Project. Entre os membros encontrava-se James Gosling, que desempenharia um papel central na conceção da nova linguagem.
O problema era claro: estes dispositivos podiam utilizar processadores e ambientes muito diferentes. Manter uma versão do software para cada arquitetura seria caro e frágil. A portabilidade tornou-se, por isso, um requisito desde o início.
Oak: Java antes de Java
Gosling começou por experimentar C e C++. C++ oferecia abstrações poderosas e controlo preciso dos recursos, mas a equipa procurava um ambiente mais simples de distribuir em hardware heterogéneo.
Gosling criou Oak, nome inspirado num carvalho visível do seu escritório. A linguagem manteve uma sintaxe familiar aos programadores de C e C++, eliminando vários mecanismos difíceis de controlar. Um garbage collector recuperava automaticamente memória e a aritmética explícita de ponteiros desaparecia.
O objetivo não era apenas executar o mesmo software noutro dispositivo, mas também tornar programas complexos mais seguros e previsíveis.
Bytecode e JVM: transferir o problema da portabilidade
A decisão arquitetural essencial de Java é o seu modelo de execução. O código-fonte não é normalmente compilado diretamente para um processador específico, mas para um formato intermédio, o bytecode Java, executado por uma Java Virtual Machine.
Se uma plataforma tiver uma JVM compatível, pode em princípio executar o mesmo bytecode. Em vez de adaptar cada aplicação a cada máquina, adapta-se a JVM às diferentes plataformas.
É esta a base do Write Once, Run Anywhere. A portabilidade perfeita continua a depender das bibliotecas, integração com o sistema e implementações, mas esta arquitetura reduz bastante o trabalho específico de cada plataforma.
Do projeto Green à Web
O projeto Green não alcançou o sucesso comercial esperado na televisão interativa. Ao mesmo tempo, a World Wide Web estava a crescer rapidamente. A Sun percebeu que uma linguagem concebida para dispositivos heterogéneos também podia ser útil numa rede de computadores muito diferentes.
Oak teve de mudar de nome por questões de marca e foi escolhido Java. A Sun apresentou publicamente a linguagem em 1995.
Desenvolveu também o HotJava, um browser capaz de executar pequenos programas Java integrados em páginas Web: os applets. Animações, interfaces e pequenos jogos tornavam a Web subitamente muito mais dinâmica. A Netscape adicionou rapidamente suporte para Java, dando enorme visibilidade à linguagem.
Essa montra seria, contudo, temporária.
Java não é JavaScript
A semelhança dos nomes continua a causar confusão, mas Java e JavaScript são linguagens diferentes.
JavaScript foi criada em 1995 por Brendan Eich na Netscape como uma linguagem de scripting leve para o browser. A sua evolução é abordada no nosso artigo sobre a história de JavaScript.
Java estabeleceu-se sobretudo em aplicações, servidores e sistemas empresariais. JavaScript tornou-se a linguagem nativa do browser antes de se expandir para servidores e muitos outros ambientes.
Java 1.0: uma plataforma, não apenas uma linguagem
Em janeiro de 1996, a Sun publicou o Java Development Kit 1.0. Java já era mais do que sintaxe: linguagem, compilador, JVM, biblioteca padrão, ferramentas de desenvolvimento, mecanismos de segurança e carregamento dinâmico de classes formavam uma plataforma coerente.
Os programadores podiam utilizar APIs comuns para coleções, entrada/saída, redes, interfaces gráficas e concorrência. Esta base partilhada tornou-se tão importante como a própria linguagem.
Java adotou também muitos princípios da programação orientada a objetos: classes, objetos, encapsulamento, herança e polimorfismo. Comparada com C++, automatizava mais a gestão de memória e evitava várias operações de baixo nível, facilitando a manutenção de grandes aplicações durante longos períodos.
Java 2 e a era empresarial
Java 1.2, lançada em 1998 sob a designação Java 2, organizou a plataforma em várias edições: J2SE para usos gerais, J2EE para aplicações empresariais e J2ME para dispositivos com recursos limitados.
J2EE teve um papel decisivo. Servlets, JavaServer Pages, Enterprise JavaBeans, acesso a bases de dados, mensagens e servidores de aplicações ofereciam um ambiente normalizado para grandes sistemas distribuídos.
Java tornou-se comum na banca, seguros, telecomunicações, administrações e grandes empresas. Portabilidade, tipagem estática, garbage collection, JVM madura e abundância de bibliotecas adequavam-se a organizações que precisavam de manter software durante dez ou vinte anos.
A JVM torna-se rápida
As primeiras JVM tinham reputação de serem lentas. Essa fraqueza diminuiu com os compiladores JIT (Just-In-Time), que identificam código executado frequentemente e o transformam em instruções nativas otimizadas durante a execução.
A JVM pode assim observar o comportamento real e otimizar os caminhos efetivamente utilizados. HotSpot, adquirido e integrado pela Sun, tornou-se uma tecnologia central da plataforma.
Java passou gradualmente de linguagem considerada demasiado lenta para plataforma capaz de suportar grandes sistemas de servidor.
Porque desapareceram os applets
Enquanto Java prosperava nos servidores, os applets entravam em declínio. Exigiam plugins ou instalações locais, criavam problemas de segurança e distribuição e podiam arrancar lentamente.
Entretanto, HTML, CSS, JavaScript e as APIs Web tornaram-se suficientemente poderosos para criar interfaces ricas sem plugins. Os browsers acabaram por abandonar essas tecnologias históricas.
O desaparecimento dos applets não significou o desaparecimento de Java: a linguagem já tinha encontrado utilizações muito mais duradouras nos servidores e sistemas empresariais.
Java 5: modernizar sem quebrar
Em 2004, Java 5 introduziu, entre outras funcionalidades, generics, anotações, enumerações, autoboxing e ciclos for melhorados.
Os generics reforçaram a segurança de tipos nas coleções. As anotações tornaram-se essenciais para frameworks que associam metadados a classes, métodos e campos.
Esta versão ilustra um desafio permanente: evoluir o suficiente para continuar moderna sem sacrificar a compatibilidade que dá valor a Java.
O ecossistema torna-se tão importante como a linguagem
Grande parte da história de Java acontece fora da sintaxe. Apache Tomcat, Hibernate e sobretudo Spring transformaram o desenvolvimento de servidores. Spring popularizou a injeção de dependências e Spring Boot simplificou depois aplicações autónomas e serviços Web.
Ferramentas de build como Maven e Gradle, bibliotecas de testes e IDEs como Eclipse, IntelliJ IDEA ou NetBeans tornaram viável trabalhar com bases de código enormes. Este tooling industrial contribuiu fortemente para a longevidade de Java.
OpenJDK: uma plataforma para além de um único fornecedor
Em 2006, a Sun anunciou a abertura de grande parte de Java. OpenJDK tornou-se a implementação open source de referência da plataforma.
Quando a Oracle adquiriu a Sun em 2010, Java entrou numa nova fase institucional e surgiram debates sobre licenças e governação. OpenJDK assumiu, contudo, um papel cada vez mais central.
Oracle, Red Hat, IBM, Amazon, Microsoft e outras organizações contribuem hoje para o ecossistema ou distribuem as suas próprias builds. Java tornou-se assim uma infraestrutura partilhada muito menos dependente de uma única distribuição comercial.
Android: outra vida para Java
As primeiras gerações do SDK Android utilizaram Java como principal linguagem de aplicações. Android não executava simplesmente as aplicações numa JVM Java SE convencional: a Google criou a sua própria stack, primeiro Dalvik e depois ART.
Esta diferença e a utilização das APIs Java contribuíram para um longo litígio entre Oracle e Google. Java permaneceu, ainda assim, durante anos a linguagem emblemática do desenvolvimento Android.
Kotlin recebeu posteriormente suporte oficial e passou a ser preferida em muitos projetos novos, mas uma enorme quantidade de código Java permanece no ecossistema Android.
Java 8: lambdas e streams
Em 2014, Java 8 trouxe uma das evoluções modernas mais importantes. As expressões lambda permitiram expressar comportamentos de forma mais concisa e a API Stream introduziu um modelo declarativo para filtrar, transformar e agregar dados.
Java incorporou assim mais ideias da programação funcional sem abandonar as suas bases orientadas a objetos. Java 8 continuou a ser uma versão dominante em produção durante muitos anos.
A JVM torna-se multilinguagem
A JVM deixou de estar reservada a Java. Scala combina programação orientada a objetos e funcional, Clojure traz uma abordagem inspirada em Lisp, Groovy oferece uma linguagem dinâmica e Kotlin uma sintaxe moderna com forte interoperabilidade Java.
Esta diversidade mostra que um dos resultados mais duradouros de Java pode ser a própria máquina virtual. É possível beneficiar do garbage collector, JIT, diagnóstico e ecossistema JVM sem escrever diretamente Java.
Java moderna: evolução regular e virtual threads
A partir de 2017, Java adotou um ritmo de publicação mais regular. As versões modernas acrescentaram módulos, var, records, text blocks, pattern matching, sealed classes e virtual threads.
Os virtual threads, desenvolvidos através do Project Loom, permitem gerir um número muito elevado de tarefas concorrentes leves mantendo um modelo de programação familiar. São especialmente úteis para serviços que passam muito tempo à espera de redes, bases de dados ou outras operações de I/O.
Esta evolução resume a estratégia moderna de Java: reduzir atritos históricos e adaptar a JVM a novas cargas de trabalho preservando, tanto quanto possível, as aplicações existentes.
Porque continua Java importante
Java ocupa um compromisso particular entre desempenho, portabilidade, segurança de execução, produtividade e estabilidade em grande escala. Python privilegia mais a concisão e o desenvolvimento rápido; JavaScript domina historicamente o browser; C++ oferece controlo mais direto dos recursos. Java ficou profundamente instalada em sistemas concebidos para durar.
A sua longevidade assenta numa forte compatibilidade, JVM madura, garbage collectors e JIT sofisticados, enorme ecossistema, boas ferramentas de diagnóstico e uma vastíssima base de código existente.
Java continua a ser criticada pela verbosidade, consumo de memória e custos de arranque. Records, pattern matching, novos garbage collectors, frameworks como Quarkus ou Micronaut e tecnologias como GraalVM respondem progressivamente a essas limitações, sobretudo na cloud e em contentores.
Java evolui, portanto, sobretudo por adaptação contínua e não por reinvenção radical.
De Oak a uma infraestrutura mundial
A televisão interativa não foi o seu grande mercado. Os applets desapareceram. A Sun Microsystems deixou de existir como empresa independente. Ainda assim, Java permaneceu.
As suas fundações - portabilidade, máquina virtual, gestão automática de memória, bibliotecas comuns e compatibilidade - revelaram-se úteis muito para além do contexto original.
Java passou de linguagem imaginada para dispositivos eletrónicos a plataforma global de execução, utilizada diretamente por Java e por uma família mais ampla de linguagens e ferramentas construídas em torno da JVM.
O essencial
Java nasceu em 1991 no Green Project da Sun Microsystems com o nome Oak. A arquitetura baseada em bytecode e JVM procurava garantir portabilidade entre dispositivos heterogéneos.
A Web deu a Java a primeira grande montra através dos applets, mas o sucesso duradouro veio sobretudo dos servidores e sistemas empresariais. Java 2, Java 5 e Java 8 fizeram evoluir a plataforma enquanto frameworks e ferramentas se tornavam cada vez mais importantes.
A abertura do OpenJDK, a diversidade de linguagens JVM e desenvolvimentos modernos como os virtual threads transformaram Java numa infraestrutura que vai muito além da linguagem original.
Perguntas frequentes
Quem criou Java?
Java foi concebida no início dos anos 1990 na Sun Microsystems. James Gosling é geralmente considerado o seu principal criador.
Como se chamava Java originalmente?
A linguagem chamava-se inicialmente Oak e foi renomeada Java antes da apresentação pública em 1995.
Porque é Java portável?
O código Java é normalmente compilado em bytecode, executado por uma JVM disponível em diferentes plataformas. O mesmo programa compilado pode assim funcionar em vários ambientes compatíveis.
Java e JavaScript estão relacionadas?
Não. Apesar dos nomes, são linguagens distintas com histórias, conceções e modelos de execução diferentes.
Ainda existem applets Java?
Praticamente desapareceram. Os browsers modernos removeram os plugins necessários e os standards Web assumiram os seus principais usos.
O que é OpenJDK?
OpenJDK é o projeto open source que fornece a implementação de referência da plataforma Java. Várias empresas e comunidades contribuem e distribuem as suas próprias builds.
Qual é a diferença entre Java e JVM?
Java é uma linguagem. A JVM é uma máquina virtual que executa bytecode. Kotlin, Scala ou Clojure também podem utilizar a JVM como plataforma de destino.
Porque durou Java tanto tempo?
Portabilidade, compatibilidade, maturidade da JVM, enorme ecossistema e adoção generalizada nas organizações criaram uma base particularmente duradoura.