0% acharam este documento útil (0 voto)
26 visualizações10 páginas

Evoluções do Java: Novidades por Versão

O documento apresenta uma análise detalhada das evoluções da linguagem Java, abordando as principais funcionalidades e melhorias introduzidas em cada versão desde o Java 8 até o Java 21. Entre os destaques estão expressões lambda, modularidade, inferência de tipos, e novos recursos como records e padrões de correspondência. O texto também inclui referências para aprofundamento sobre as novidades do Java.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
26 visualizações10 páginas

Evoluções do Java: Novidades por Versão

O documento apresenta uma análise detalhada das evoluções da linguagem Java, abordando as principais funcionalidades e melhorias introduzidas em cada versão desde o Java 8 até o Java 21. Entre os destaques estão expressões lambda, modularidade, inferência de tipos, e novos recursos como records e padrões de correspondência. O texto também inclui referências para aprofundamento sobre as novidades do Java.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

CENTRO UNIVERSITÁRIO DO PLANALTO

CENTRAL APARECIDO DOS SANTOS - UNICEPLAC


PROGRAMAÇÃO ORIENTADA A OBJETOS- ENGENHARIA DE SOFTWARE
3º PERÍODO - NOTURNO

Evoluções Java

Gama/DF
2024
CENTRO UNIVERSITÁRIO DO PLANALTO
CENTRAL APARECIDO DOS SANTOS - UNICEPLAC
PROGRAMAÇÃO ORIENTADA A OBJETOS - ENGENHARIA DE SOFTWARE
3º PERÍODO - NOTURNO

ALUNO: JOÃO PEDRO SANTOS OLIVEIRA SOUZA

Gama/DF
2024
JAVA 8 (2014)

1. Expressões Lambda:
Introduziu expressões lambda e a Streams API, revolucionando o tratamento de coleções de
dados e processamento paralelo.

2. [Link]:
Introduziu o pacote [Link] para manipulação de datas e horas de forma mais eficiente e
robusta.

3. Métodos Padrão em Interfaces:


Permitiu que interfaces definissem métodos concretos.

4. Ordenação Paralela de Arrays:


Melhorou o desempenho em operações de ordenação.

5. Referências a Métodos:
Possibilitou referenciar métodos existentes de forma mais concisa.

JAVA 9 (2017)

1. Project Jigsaw: Modularidade no Java:


• Introduziu o sistema de módulos, permitindo a organização mais eficiente do código,
melhor manutenção e maior segurança.
• Benefícios incluem encapsulamento, melhoria na segurança e gerenciamento
simplificado.

2. JShell: O REPL do Java:


• O primeiro Read-Eval-Print Loop (REPL) oficial para Java.
• Permite testar e depurar código interativamente, facilitando o aprendizado e
aumentando a produtividade.

3. API de Streams Aprimorada:


Novos métodos na API de Streams, como takeWhile, dropWhile e ofNullable, para
processamento de coleções de dados.

4. API HTTP/2:
Introduziu uma nova API HTTP Client que suporta HTTP/2 e WebSocket, melhorando o
desempenho e a eficiência nas requisições HTTP.
JAVA 10 (2018)

1. Inferência de tipos para variáveis locais (JEP 286):


Agora, você pode usar a palavra-chave var para declarar variáveis locais sem especificar
explicitamente o tipo. Isso torna o código mais conciso e legível.

2. Releases baseados em tempo (JEP 322):


Com o novo modelo de lançamento, o Java agora segue um cronograma regular de
atualizações a cada seis meses. Isso significa que você não precisa esperar anos para
obter inovações na linguagem.

3. Garbage-Collector Interface (JEP 304):


O G1 Garbage Collector recebeu melhorias de desempenho para execução de full-gc
paralelo. Além disso, uma nova interface facilita o isolamento do código-fonte, abrindo
caminho para novas implementações, como o ZGC.

4. Parallel Full GC para G1 (JEP 307):


O G1 agora suporta coleta paralela completa (full-gc), melhorando o desempenho em
cenários de grande carga.

5. Alocação da Heap em dispositivos de memória alternativos (JEP 316):


Essa melhoria permite a alocação da heap em dispositivos de memória não
convencionais, como GPUs.

6. Remoção da ferramenta de geração de cabeçalho nativo (JEP 313):


A ferramenta javah, usada para gerar cabeçalhos nativos, foi removida. Em vez disso,
recomenda-se usar a API JNI para interagir com código nativo.

7. Compilador JIT experimental baseado em Java (JEP 317):


O Java 10 introduziu um compilador JIT experimental escrito em Java, chamado Graal.
Ele oferece melhorias de desempenho e flexibilidade.

JAVA 11 (2018)

1. Anotações de tipo em expressões lambda (JEP 323):


Agora, você pode usar a inferência de tipos para variáveis locais em expressões lambda,
completando o recurso introduzido no Java 10. Isso torna o código mais conciso e legível.

2. Cliente HTTP padronizado ([Link]):


O Java 11 consolidou o cliente HTTP, substituindo o pacote [Link]. Ele oferece
suporte ao HTTP 1.1/2 e implementa um modelo não bloqueante de comunicação
semelhante ao [Link].
3. Módulos removidos do Java EE:
O Java 11 removeu alguns módulos do Java EE, como [Link], [Link] e
[Link]. Isso reflete a transição do Java EE para o Jakarta EE.

JAVA 12 (2019)

1. Novos métodos String:


A proposta de aprimoramento do JDK nº 326 (JEP 326) incluiu dois novos métodos para
lidar com strings: o indent e o transform.

• Indent: Aplica uma identação (espaçamento à esquerda) no texto de saída.


Exemplo:

String texto = "Olá, mundo!";


[Link]([Link](3));
// Saída: " Olá, mundo!"

• Transform: Recebe uma expressão lambda com uma string como parâmetro e retorna
um objeto.
Exemplo:

String texto = "exemplo";


String resultado = [Link](s -> [Link]());
// Saída: "EXEMPLO"

2. Expressões switch:
Introdução da sintaxe case value -> e a possibilidade de atribuir uma expressão switch a
uma variável.
Antes:

switch (diaDaSemana) {
case 1:
return "Domingo";
case 2:
return "Segunda-feira";
// ...
}
Com a refatoração do Java 12:

String dia = switch (diaDaSemana) {


case 1 -> "Domingo";
case 2 -> "Segunda-feira";
// ...
};

3. Melhorias significativas no garbage collector G1:


• A versão 12 da JDK trouxe melhorias para o garbage collector G1 (JEP 344).
• Agora, o coletor se comporta de maneira diferente para alcançar a meta de tempo de
pausa fornecido pelo usuário.
• Divide as regiões a serem coletadas em partes obrigatórias e opcionais.

JAVA 13 (2019)

1. Suporte para Virtual Threads:


• Os Virtual Threads são threads leves e escaláveis que podem ser criadas e gerenciadas
de forma mais eficiente do que as threads tradicionais. Eles visam melhorar o
desempenho e a concorrência em aplicativos Java.

2. Suporte inicial para JVM Checkpoint Restore (Projeto CRaC):


• O projeto CRaC visa permitir a suspensão e restauração de estados de máquinas virtuais
Java (JVMs). Isso pode ser útil para cenários como migração de VMs ou recuperação de
falhas.

JAVA 14 (2020)

1. Records (Preview) [JEP 359]:


• Os records são uma maneira concisa de declarar classes relacionadas a dados. Eles
simplificam a criação de classes imutáveis com campos e métodos padrão, reduzindo a
necessidade de escrever código repetitivo para getters, setters, equals e hashCode.

2. Pattern Matching para instanceof (Preview) [JEP 305]:


• Esse recurso permite que você use o operador `instanceof` de forma mais expressiva e
segura. Agora, você pode extrair componentes de objetos diretamente em uma
expressão `if` ou `switch`.

3. NullPointerExceptions mais informativas [JEP 358]:


• O Java 14 aprimorou as mensagens de erro para `NullPointerExceptions`, tornando-as
mais descritivas e facilitando a identificação da causa do problema.
4. Switch Expressions [JEP 361]:
• O recurso de expressões `switch` foi aprimorado, permitindo que você use o `switch`
como uma expressão, não apenas como uma declaração. Isso torna o código mais
conciso e legível.

5. Text Blocks (Segunda prévia) [JEP 368]:


• Os text blocks facilitam a escrita de strings multilinhas, eliminando a necessidade de
escapar caracteres de nova linha e aspas. Isso é especialmente útil para escrever SQL,
JSON ou HTML no código-fonte.

Além disso, o Java 14 também trouxe melhorias relacionadas à memória e ao desempenho, como
o coletor de lixo NUMA-Aware Memory Allocation for G1, Non-Volatile Mapped Byte Buffers e
Foreign-Memory Access API.

JAVA 15 (2020)

Novas funcionalidades:
• Edwards-Curve Digital Signature Algorithm (EdDSA) (JEP 339): Este recurso melhora
a segurança e o desempenho ao implementar assinaturas criptográficas usando o
EdDSA, conforme descrito no RFC 80321.

Outras melhorias:
1. Descarregamento simultâneo de classe (JEP 351).
2. Aumento do tamanho máximo de heap de 4 TB para 16 TB.
3. Redução do tamanho mínimo do heap para 8 MB (usando a opção -XX:SoftMaxHeapSize).
4. Suporte para o perfilador de vazamento JFR.
5. Suporte para compartilhamento de dados de classe.

JAVA 16 (2021)

1. Correspondência de padrões para instanceof (JEP 394): Aprimora a linguagem Java com
correspondência de padrões para o operador `instanceof`.
2. Records (JEP 395): Introduz registros, que são classes que atuam como portadores
transparentes para dados imutáveis.
3. Ferramenta de empacotamento (JEP 392): Fornece a ferramenta `jpackage` para
empacotar aplicativos Java independentes.
4. Recursos de incubação:
• Vector API (JEP 338)
• Foreign Linker API (JEP 389)
• Foreign-Memory Access API (JEP 389)
5. Recurso de visualização: Sealed Classes (JEP 397).
JAVA 17 (2021)

1. Suporte a text blocks: Agora é possível escrever strings de forma mais legível e fácil de
manter usando text blocks.

2. Suporte a switch expressions: Os desenvolvedores podem escrever expressões switch de


forma mais concisa e legível.

3. Classes seladas (sealed classes): Um novo recurso chamado “sealed classes” foi
adicionado à linguagem. Ele permite controlar quais classes podem ser subclasses de
outras, melhorando a segurança e a modularidade do código.

4. Melhorias na API de concorrência: O método orElseThrow foi adicionado para tratamento


de exceções em CompletableFuture, e houve melhorias no desempenho da classe
ThreadLocalRandom.

JAVA 18 (2022)

1. UTF-8 por Padrão (JEP 400): A partir do Java 18, o charset UTF-8 é o padrão para todas
as APIs do Java, garantindo consistência entre sistemas operacionais e localidades.

2. Servidor Web Simples (JEP 408): Introduz uma API simplificada para criar servidores web
básicos, especialmente útil para estudantes e desenvolvedores iniciantes em Java.

3. Trechos de Código na Documentação da API Java (JEP 413): Agora é possível incluir
trechos de código diretamente na documentação da API Java, facilitando o entendimento e
uso das classes e métodos.

4. Reimplementação do Núcleo de Reflexão com Method Handles (JEP 416): Melhorias no


desempenho e flexibilidade da reflexão em Java.

5. API Vector (JEP 417): Introduz uma API para operações vetoriais, otimizando o
processamento de dados em paralelo.

6. Resolução de Endereço de Internet (JEP 418): Aprimoramentos na resolução de nomes


de domínio e endereços IP.

7. API para Memória e Funções Externas (JEP 419): Fornece suporte para acesso a
memória externa e chamadas de funções nativas.

8. Correspondência de Padrões para `switch` (JEP 420): Aprimora a expressividade e


legibilidade das expressões `switch`.
JAVA 19 (2022)

1. Record Patterns (JEP 405): Permite alinhar padrões e tipos de registro para criar um
processamento de dados declarativo e composto.

2. Visualizações do Project Loom (Virtual Threads e Structured Concurrency): Reduzem


drasticamente o esforço necessário para escrever e manter aplicações simultâneas de alto
rendimento em Java.

JAVA 20 (2023)

1. Projeto Amber:
• JEP 432: Padrões de Registro (segunda visualização): Aumenta a produtividade do
desenvolvedor, permitindo expressar consultas de dados sofisticadas e combináveis
usando padrões de registro.
• JEP 433: Correspondência de Padrões para Switch (quarta visualização):
Aprimora a semântica do código Java, tornando as expressões e instruções switch mais
concisas e seguras.

2. Projeto Loom:
• JEP 429: Valores com Escopo (incubadora): Permite o compartilhamento de dados
imutáveis entre threads por meio de valores com escopo, otimizando o desempenho e
a facilidade de uso em cenários com várias threads virtuais.

JAVA 21 (2023)

1. Record Patterns em Blocos e Expressões Switch:


• Essa funcionalidade é um marco para o Java, pois agora ele suporta apropriadamente
padrões para programação funcional, semelhante a linguagens como Kotlin, Rust ou
C#.
• Isso torna o código mais conciso e legível, facilitando a manipulação de dados.

2. Coleções Sequenciadas:
• Introduz uma nova interface para recuperação do primeiro e último elemento em coleções
de dados ordenadas.
• Também permite a reversão da sequência de dados.

3. Generational ZGC:
• Um novo modelo de coletor de lixo (GC) que melhora o desempenho de aplicações,
especialmente aquelas que requerem uso intensivo de memória e CPU.
REFERÊNCIAS

ORACLE. [S. l.], 2014. Disponível em: [Link] Acesso em: 26 jun.
2024.

DEVMEDIA. Novidades do Java. [S. l.], 2020. Disponível em:


[Link] Acesso em: 26 jun. 2024.

JAVA (linguagem de programação). [S. l.], 2024. Disponível em:


[Link] Acesso em: 26 jun. 2024.

ALURA. O mínimo que você deve saber de Java 8. [S. l.], 2023. Disponível em:
[Link] Acesso em: 26 jun.
2024.

INFORCHANNEL. Oracle anuncia a disponibilidade do Java 19 com diversas melhorias. [S.


l.], 2022. Disponível em: [Link]
do-java-19-com-diversas-melhorias/. Acesso em: 26 jun. 2024.

NEW Features in Java 13. [S. l.], 2024. Disponível em: [Link]
features. Acesso em: 26 jun. 2024.

O MÍNIMO que você deve saber de Java 10. [S. l.], 2018. Disponível em:
[Link] Acesso em: 26 jun.
2024.

GUIA DO JAVA. Retrospectiva 2023. [S. l.], 2020. Disponível em:


[Link] Acesso em: 26
jun. 2024.

Você também pode gostar