Apresentacao

Curiosidades

Revisando sobre aspectos históricos e curiosidades sobre a linguagem Java

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.