Curiosidades
A revolução da linguagem Java se caracteriza por seu impacto na evolução da programação, oferecendo uma plataforma robusta, segura e independente de plataforma. A seguir, apresento uma linha do tempo resumida que destaca os marcos mais importantes na história do Java:
Linha do Tempo
1991 - Criação do Java (Inicialmente "Oak")
- James Gosling e Mike Sheridan, da Sun Microsystems, começam a trabalhar em uma linguagem de programação chamada Oak, com o objetivo de desenvolver um sistema para dispositivos eletrônicos. O nome "Oak" foi alterado para "Java" em 1995 devido a problemas de marca registrada.
1995 - Lançamento do Java 1.0
- A primeira versão do Java foi lançada em 1995 com o slogan "Write Once, Run Anywhere" (Escreva uma vez, execute em qualquer lugar). O Java foi projetado para ser uma linguagem de programação portátil, permitindo que os programas rodassem em qualquer plataforma sem a necessidade de modificação.
1996 - Lançamento do Java 1.1
- A versão 1.1 introduziu grandes melhorias, incluindo a API de JavaBeans e novos recursos como a inclusão do Java RMI (Remote Method Invocation) e a API de eventos gráficos.
1997 - Padrão ISO/IEC
- O Java foi oficialmente padronizado pela ISO/IEC, o que consolidou a confiança em sua utilização em larga escala.
2004 - Lançamento do Java 5 (J2SE 5.0)
- A versão 5 trouxe grandes avanços, incluindo generics, enums, o loop "for-each", as anotações, e a API de concorrência. Essa versão foi um marco na evolução da linguagem, trazendo mais recursos para tornar o código mais legível e modular.
2006 - Sun Microsystems lança o código-fonte aberto do Java
- A Sun Microsystems decide liberar o código-fonte do Java sob a licença GPL (General Public License), permitindo maior colaboração e transparência no desenvolvimento da linguagem.
2009 - Oracle adquire a Sun Microsystems
- A Oracle Corporation compra a Sun Microsystems, adquirindo o Java e suas plataformas associadas. Isso trouxe uma nova era para o desenvolvimento e suporte do Java.
2011 - Lançamento do Java 7
- A versão 7 trouxe melhorias de desempenho, novos recursos para manipulação de arquivos e a introdução de try-with-resources para o gerenciamento de recursos.
2014 - Lançamento do Java 8
- O Java 8 foi um marco significativo, introduzindo expressões lambda e a API de Streams, que permitiram uma programação funcional dentro do Java. O suporte a data e hora também foi aprimorado com a nova API java.time.
2017 - Lançamento do Java 9
- A versão 9 introduziu o sistema de módulos (Jigsaw), que ajudou a modularizar a plataforma Java e melhorar o gerenciamento de dependências.
2018 - Lançamento do Java 10 e ciclo de lançamento semestral
- A Oracle implementou um ciclo de lançamentos semestrais, permitindo que novas versões fossem lançadas com mais frequência. O Java 10 trouxe o recurso de inferência de tipo local com "var".
2019 - Lançamento do Java 12, 13 e 14
- Continuando com o ciclo de lançamento semestral, o Java se manteve em constante evolução com recursos como aprimoramentos na coleta de lixo (Garbage Collection) e melhorias na performance e estabilidade da linguagem.
2021 - Lançamento do Java 16 e 17
- O Java 16 trouxe o recurso de Project Loom (implementação de threads leves) e outros ajustes. O Java 17 foi uma versão LTS (Long Term Support), o que a tornou uma versão estável e com suporte de longo prazo.
2023 - Lançamento do Java 20
- A versão 20 seguiu o ciclo semestral, continuando a implementação de novos recursos e melhorias de desempenho.
Impacto da Revolução do Java:
Java trouxe uma verdadeira revolução ao mundo da programação, devido à sua:
- Portabilidade: O slogan "Write Once, Run Anywhere" foi uma das principais inovações, tornando o Java a linguagem ideal para ambientes corporativos e sistemas distribuídos.
- Segurança: A plataforma Java foi projetada com características que garantem um nível de segurança, com a máquina virtual (JVM) garantindo a segurança de execução.
- Ampla Adoção: Com o tempo, Java se consolidou como uma das linguagens mais populares, sendo amplamente utilizada em empresas e aplicativos móveis (especialmente no Android).
A linguagem continua a evoluir, adaptando-se às novas necessidades de desenvolvedores e aos avanços tecnológicos.
Claro! A seguir, destacarei as principais features introduzidas em cada uma das versões mencionadas da linguagem Java:
Java 1.0 (1995)
- Primeira versão estável do Java.
- Máquina Virtual Java (JVM): Permitindo a execução de bytecode em diferentes plataformas.
- API de Entrada/Saída (I/O): Para interagir com arquivos e outros dispositivos.
- Gerenciamento automático de memória: Utilização do garbage collection.
- Portabilidade: "Write Once, Run Anywhere" - O código compilado podia ser executado em qualquer plataforma com JVM instalada.
Java 1.1 (1997)
- JavaBeans: Introdução da API para criar componentes reutilizáveis.
- RMI (Remote Method Invocation): Permite chamadas de métodos em objetos distribuídos em redes.
- JDBC (Java Database Connectivity): API para conectar o Java a bancos de dados.
- Coleções (Collections Framework): Estruturas de dados como listas, conjuntos, mapas etc.
Java 5 (J2SE 5.0) (2004)
- Generics: Permite que classes, interfaces e métodos trabalhem com tipos de dados parametrizados.
- Enums: Tipos de dados que permitem definir um conjunto fixo de constantes.
- Annotations: Marcação de código com metadados, ajudando ferramentas externas (ex: frameworks de testes).
- Loop for-each: Facilita a iteração em coleções.
- API de Concurrency: Melhorias no suporte a múltiplas threads com a introdução do pacote
java.util.concurrent
.
Java 6 (2006)
- Melhorias de Performance: O Java 6 trouxe melhor desempenho na JVM e no tempo de execução.
- Compiler API: Para compilar código Java programaticamente.
- JAX-WS: APIs para criar web services baseados em SOAP.
- Scripting (JSR 223): Suporte para execução de código de outras linguagens, como JavaScript, dentro do Java.
- Java Compiler API: Permitindo a compilação de código fonte diretamente em tempo de execução.
Java 7 (2011)
- Try-with-resources: Introduzido para facilitar o fechamento de recursos automaticamente (como streams).
- Fork/Join Framework: Para dividir tarefas em múltiplas threads e melhorar a performance em tarefas paralelizadas.
- Strings em switch: Permite o uso de strings em instruções
switch
. - NIO 2: Melhorias no pacote de New I/O (java.nio), incluindo o suporte a sistemas de arquivos mais modernos.
Java 8 (2014)
- Expressões Lambda: Introdução de funções anônimas e programação funcional no Java.
- API de Streams: Para processamento de coleções de dados de forma mais declarativa e eficiente.
- Novo sistema de Data/Time (java.time): Para representar e manipular data, hora e períodos de maneira mais intuitiva.
- Default Methods: Métodos padrão em interfaces, permitindo a implementação de métodos diretamente na interface sem precisar implementá-los nas classes concretas.
- CompletableFuture: Introdução para programação assíncrona mais fácil.
Java 9 (2017)
- Sistema de Módulos (Project Jigsaw): Modularização da plataforma Java, permitindo maior controle sobre dependências e organização do código.
- JShell: Introdução de um shell interativo para o Java, permitindo testes rápidos e experimentação com código Java no terminal.
- Compact Strings: Melhorias no gerenciamento de strings para reduzir o uso de memória.
- Melhorias em Processamento de Streams: Refinamentos no uso da API de Streams para tornar o processamento mais eficiente.
Java 10 (2018)
- Inferência de Tipo Local (var): Introdução da palavra-chave
var
para inferir o tipo de variáveis localmente, tornando o código mais conciso. - Aplicações de Garbage Collection (GC): Introdução do Garbage Collector G1 com melhorias no gerenciamento de memória.
- Interfaces com métodos privados: Agora é possível ter métodos privados em interfaces para evitar duplicação de código.
Java 11 (2018)
- Java como OpenJDK: O Java 11 foi a primeira versão a ser distribuída como uma versão de longo prazo (LTS).
- Remoção do Java EE e CORBA: Algumas bibliotecas antigas, como Java EE e CORBA, foram removidas do JDK.
- HTTP Client API: API de cliente HTTP baseada no padrão HTTP/2, com suporte para chamadas assíncronas.
- EOL do Java Applets: Descontinuação do suporte a Java Applets no navegador.
Java 12 (2019)
- Shenandoah GC: Um novo coletor de lixo para redução de pausas, que melhora a performance em sistemas com baixa latência.
- JEP 189: Consolidação da nova política de versões de seis meses de lançamento.
- Switch Expressions (Preview): Introdução de uma forma mais expressiva de usar o
switch
.
Java 13 (2019)
- Text Blocks (Preview): Introdução dos "Text Blocks", um recurso para criar strings multilineares de forma mais simples e legível.
- ZGC (Garbage Collector): Introdução do ZGC (Z Garbage Collector), focado em latência de pause extremamente baixa.
Java 14 (2020)
- NVM (Non-Volatile Memory) Support: Suporte para memória não volátil em novos tipos de máquinas.
- Switch Expressions (Final): A estrutura de
switch
foi finalizada com sintaxe mais moderna e útil. - Records (Preview): Introdução dos Records (registro), um tipo de classe especializada para representar dados imutáveis de forma compacta.
Java 15 (2020)
- JEP 339 (Edwards-Curve Digital Signature Algorithm - ECDSA): Introdução de algoritmos de assinatura digital.
- Removal of RMI Activation: Remoção de funcionalidade de ativação RMI.
- ZGC (improvements): Melhorias na implementação do ZGC.
Java 16 (2021)
- Project Loom (Preview): Introdução de threads leves, melhorando a escalabilidade de aplicativos concorrentes.
- JEP 394 (Pattern Matching for instanceof - Preview): Introdução do Pattern Matching no operador
instanceof
para simplificar e melhorar o código. - JEP 376 (ZGC - Concurrent Thread Stack Processing): Melhorias adicionais no ZGC para melhorar a performance.
Java 17 (2021) (LTS)
- Sealed Classes: Classes que podem ser configuradas para permitir herança apenas de subclasses específicas.
- Strong Encapsulation: A implementação mais robusta de encapsulamento de classes internas.
- JEP 356 (Enhanced Pseudo-Random Number Generators): Introdução de geradores de números pseudo-aleatórios mais avançados.
Java 18 (2022)
- Simple Web Server (JEP 408): Adição de um servidor HTTP simples para propósitos de desenvolvimento.
- Code Snippets in Java API Documentation (JEP 413): Suporte para inserir snippets de código diretamente na documentação da API.
Java 19 (2022)
- Virtual Threads (Project Loom - Preview): Implementação de threads leves, focadas em melhorar a escalabilidade e simplicidade em aplicativos concorrentes.
- Foreign Function & Memory API (Incubator): Fornecimento de uma API para interagir com código nativo (C/C++), sem precisar de JNI (Java Native Interface).
Java 20 (2023)
- Record Patterns (Preview): Aprimoramento do Pattern Matching para objetos imutáveis (Record).
- Foreign Function & Memory API (Final): A API foi estabilizada após incubação e agora é mais pronta para uso.
Cada versão trouxe inovações significativas para melhorar a performance, segurança, produtividade e simples utilização da linguagem, com o foco na evolução da plataforma e da maneira de programar em Java.