Java em 2021
Java está evoluindo? Como está o cenário atual
e o que esperar para os próximos anos!
1
JVM e JDK
● JVM (Java Virtual Machine): Necessária apenas para
executar os Bytecodes.
● JDK (Java Development Kit): Necessária para quem
desenvolve. Além das ferramentas de
desenvolvimento, incorpora a JVM.
2
Distribuições do JDK e JVM
● Como é um projeto open source, o JDK pode ser alterado e
distribuído livremente.
● A casa do JDK é o projeto OpenJDK https://openjdk.java.net/
3
Distribuições do JDK e JVM
● Oracle JDK
● OpenJDK Build by Oracle
● Oracle GraalVM
● Adopt OpenJDK
● Adopt OpenJDK OpenJ9
● Red Hat OpenJDK Build
● Azul Zulu
● Amazon Corretto
● Microsoft Build of OpenJDK™ 4
Novo ciclo de releases
A partir do Java 9 (2017), a cadência de releases mudou para cada 6
meses com versões com longo suporte (LTS) e e versões
intermediárias para facilitar a migração e experimento de novas
features.
5
Um breve review
6
Java 16
https://openjdk.java.net/projects/jdk/16/
https://www.guiadojava.com.br/2021/03/novidades-do-java-16.html
7
Java 16
Os 17 JEPs entregues com Java 16 foram agrupados em seis categorias diferentes:
1. Novos recursos de linguagem
2. Melhorias na JVM
3. Novas ferramentas e bibliotecas
4. Futureproofing Your Work (Prepare-se para o futuro)
5. Incubator and Preview Features
6. Improving Productivity for OpenJDK Developers
8
1. Novos recursos de linguagem
JEP 394 Pattern Matching for
instanceof
https://www.guiadojava.com.br/2021/04/java-16-pa
ttern-matching-for-instanceof.html
9
1. Novos recursos de linguagem
JEP 395 Records
https://www.guiadojava.com.br/2021/04/java-records.html
https://nipafx.dev/java-record-semantics/
10
2. Melhorias na JVM
JEP 376 ZGC Concurrent Thread Processing
JEP 387 Elastic Metaspace
11
3. Novas ferramentas e bibliotecas
JEP 380 Unix-Domain Socket Channels
JEP 392 Packaging Tool
Esse recurso foi introduzido pela primeira vez como um módulo incubado no Java 14. Essa ferramenta permite
empacotar aplicativos Java autocontidos. Ele oferece suporte a formatos nativos para oferecer aos usuários finais
uma experiência de instalação natural. Esses formatos incluem msi e exe no Windows, pkg e dmg no macOS e
deb e rpm no Linux.
12
4. Futureproofing Your Work
(Prepare-se para o futuro)
JEP 390 Warning for Value-Based Classes
JEP 396 Strongly Encapsulate JDK Internals by default
13
5. Incubator and Preview Features
JEP 338 Vector API (Incubator)
JEP 389 Foreign Linker API (Incubator)
JEP 393 Foreign Memory Access API (3rd Incubator)
JEP 397 Sealed Classes (2nd Preview)
14
6. Improving Productivity for
OpenJDK Developers
JEP 347 Enable C++14 Language Features (in JDK source code)
JEP 357 Migrate from Mercurial to Git
JEP 369 Migrate to GitHub
JEP 386 Alpine Linux Port
JEP 388 Windows/AArch64 Port
15
Java 16 - Records e Pattern Matching
for instanceof
16
https://github.com/sandrogiacom/java-2021
Java 16 - jpackage
PS C:UsersSandrojava-2021> jpackage -i inputDir -n name --main-class HelloJava2021
--main-jar target/java-2021.jar
[17:54:35.839] Can not find WiX tools (light.exe, candle.exe)
[17:54:35.854] Download WiX 3.0 or later from https://wixtoolset.org and add it to the PATH.
Error: Invalid or unsupported type: [null]
https://openjdk.java.net/jeps/392 17
Java 12 ao 16
Java 16 lançado em março de 2021 é atualmente é a versão mais
recente do Java, porém ela perde o suporte logo que a versão 17
(LTS) for lançada.
18
Java 11 para 17
Normalmente estamos utilizando em produção projetos com
Java 8 e 11, aguardando para atualizar para o Java 17
19
Java 17
https://openjdk.java.net/projects/jdk/17/
14 JEPs foram selecionadas para compor esta nova versão: 14/09/2021
Destaques:
● JEP 409: Sealed Classes
● JEP 406: Pattern Matching for switch (Preview)
20
Dicas para migração
● Sempre ficar de olho nos warnings
● Cuidado com excesso de bibliotecas e frameworks
● Comece pelo Runtime
● Atualize as dependências (mvn versions:display-plugin-updates / mvn
versions:display-dependency-updates)
○ [INFO] The following dependencies in Dependencies have newer versions:
○ [INFO] org.modelmapper:modelmapper ........................... 2.4.3 -> 2.4.4
● Não deixe de atualizar as versões LTS (não basta utilizar a primeira versão pois sempre são
liberadas correçẽos e melhorias)
16 > 17
https://www.infoq.com/presentations/upgrade-java16-java17/?mkt_tok=NDI2LVFWRC0xMTQAAAF9hGizGXwK_
ztBMLcyDMpc6hAocaIHzf6nwCN7PTZTN9knAb0aTgtjiPipJ4TQ4lVrBshX3U952HjkAMo21iyGG8vZCX_ZSzt1Qfs
0FGeylW7G6g 21
Java 17 - Por que migrar
● Melhorias de performance
● Correção de bugs
● Sem suporte a versões antigas
● Usar recursos bacanas como Records e Pattern Matching
https://javaalmanac.io/
https://github.com/johanjanssen/JavaUpgrades
22
Não ignore os WARNINGS
Para quem migrou do Java 8 para 11, é comum este tipo de alerta
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by ReflBytecodeName to method
sun.invoke.util.BytecodeName.parseBytecodeName(java.lang.String)
WARNING: Please consider reporting this to the maintainers of ReflBytecodeName
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access
operations
WARNING: All illegal access operations will be denied in a future release
Isto é parte de um processo longo e doloroso para encapsular fortemente as partes internas do tempo de execução
Java.
https://blogs.oracle.com/javamagazine/java-runtime-encapsulation-internals?source=:em:nw:mt::::RC_WWMK200429P00043:NSL400155430&elq_m
id=192018&sh=082613230912082613230912201826241214150423100112&cmid=WWMK200429P00043C0026 23
Obrigado!
https://github.com/sandrogiacom
https://twitter.com/sandrogiacom
https://www.linkedin.com/in/sandrogiacomozzi
https://www.guiadojava.com.br/
24

Java em 2021

  • 1.
    Java em 2021 Javaestá evoluindo? Como está o cenário atual e o que esperar para os próximos anos! 1
  • 2.
    JVM e JDK ●JVM (Java Virtual Machine): Necessária apenas para executar os Bytecodes. ● JDK (Java Development Kit): Necessária para quem desenvolve. Além das ferramentas de desenvolvimento, incorpora a JVM. 2
  • 3.
    Distribuições do JDKe JVM ● Como é um projeto open source, o JDK pode ser alterado e distribuído livremente. ● A casa do JDK é o projeto OpenJDK https://openjdk.java.net/ 3
  • 4.
    Distribuições do JDKe JVM ● Oracle JDK ● OpenJDK Build by Oracle ● Oracle GraalVM ● Adopt OpenJDK ● Adopt OpenJDK OpenJ9 ● Red Hat OpenJDK Build ● Azul Zulu ● Amazon Corretto ● Microsoft Build of OpenJDK™ 4
  • 5.
    Novo ciclo dereleases A partir do Java 9 (2017), a cadência de releases mudou para cada 6 meses com versões com longo suporte (LTS) e e versões intermediárias para facilitar a migração e experimento de novas features. 5
  • 6.
  • 7.
  • 8.
    Java 16 Os 17JEPs entregues com Java 16 foram agrupados em seis categorias diferentes: 1. Novos recursos de linguagem 2. Melhorias na JVM 3. Novas ferramentas e bibliotecas 4. Futureproofing Your Work (Prepare-se para o futuro) 5. Incubator and Preview Features 6. Improving Productivity for OpenJDK Developers 8
  • 9.
    1. Novos recursosde linguagem JEP 394 Pattern Matching for instanceof https://www.guiadojava.com.br/2021/04/java-16-pa ttern-matching-for-instanceof.html 9
  • 10.
    1. Novos recursosde linguagem JEP 395 Records https://www.guiadojava.com.br/2021/04/java-records.html https://nipafx.dev/java-record-semantics/ 10
  • 11.
    2. Melhorias naJVM JEP 376 ZGC Concurrent Thread Processing JEP 387 Elastic Metaspace 11
  • 12.
    3. Novas ferramentase bibliotecas JEP 380 Unix-Domain Socket Channels JEP 392 Packaging Tool Esse recurso foi introduzido pela primeira vez como um módulo incubado no Java 14. Essa ferramenta permite empacotar aplicativos Java autocontidos. Ele oferece suporte a formatos nativos para oferecer aos usuários finais uma experiência de instalação natural. Esses formatos incluem msi e exe no Windows, pkg e dmg no macOS e deb e rpm no Linux. 12
  • 13.
    4. Futureproofing YourWork (Prepare-se para o futuro) JEP 390 Warning for Value-Based Classes JEP 396 Strongly Encapsulate JDK Internals by default 13
  • 14.
    5. Incubator andPreview Features JEP 338 Vector API (Incubator) JEP 389 Foreign Linker API (Incubator) JEP 393 Foreign Memory Access API (3rd Incubator) JEP 397 Sealed Classes (2nd Preview) 14
  • 15.
    6. Improving Productivityfor OpenJDK Developers JEP 347 Enable C++14 Language Features (in JDK source code) JEP 357 Migrate from Mercurial to Git JEP 369 Migrate to GitHub JEP 386 Alpine Linux Port JEP 388 Windows/AArch64 Port 15
  • 16.
    Java 16 -Records e Pattern Matching for instanceof 16 https://github.com/sandrogiacom/java-2021
  • 17.
    Java 16 -jpackage PS C:UsersSandrojava-2021> jpackage -i inputDir -n name --main-class HelloJava2021 --main-jar target/java-2021.jar [17:54:35.839] Can not find WiX tools (light.exe, candle.exe) [17:54:35.854] Download WiX 3.0 or later from https://wixtoolset.org and add it to the PATH. Error: Invalid or unsupported type: [null] https://openjdk.java.net/jeps/392 17
  • 18.
    Java 12 ao16 Java 16 lançado em março de 2021 é atualmente é a versão mais recente do Java, porém ela perde o suporte logo que a versão 17 (LTS) for lançada. 18
  • 19.
    Java 11 para17 Normalmente estamos utilizando em produção projetos com Java 8 e 11, aguardando para atualizar para o Java 17 19
  • 20.
    Java 17 https://openjdk.java.net/projects/jdk/17/ 14 JEPsforam selecionadas para compor esta nova versão: 14/09/2021 Destaques: ● JEP 409: Sealed Classes ● JEP 406: Pattern Matching for switch (Preview) 20
  • 21.
    Dicas para migração ●Sempre ficar de olho nos warnings ● Cuidado com excesso de bibliotecas e frameworks ● Comece pelo Runtime ● Atualize as dependências (mvn versions:display-plugin-updates / mvn versions:display-dependency-updates) ○ [INFO] The following dependencies in Dependencies have newer versions: ○ [INFO] org.modelmapper:modelmapper ........................... 2.4.3 -> 2.4.4 ● Não deixe de atualizar as versões LTS (não basta utilizar a primeira versão pois sempre são liberadas correçẽos e melhorias) 16 > 17 https://www.infoq.com/presentations/upgrade-java16-java17/?mkt_tok=NDI2LVFWRC0xMTQAAAF9hGizGXwK_ ztBMLcyDMpc6hAocaIHzf6nwCN7PTZTN9knAb0aTgtjiPipJ4TQ4lVrBshX3U952HjkAMo21iyGG8vZCX_ZSzt1Qfs 0FGeylW7G6g 21
  • 22.
    Java 17 -Por que migrar ● Melhorias de performance ● Correção de bugs ● Sem suporte a versões antigas ● Usar recursos bacanas como Records e Pattern Matching https://javaalmanac.io/ https://github.com/johanjanssen/JavaUpgrades 22
  • 23.
    Não ignore osWARNINGS Para quem migrou do Java 8 para 11, é comum este tipo de alerta WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by ReflBytecodeName to method sun.invoke.util.BytecodeName.parseBytecodeName(java.lang.String) WARNING: Please consider reporting this to the maintainers of ReflBytecodeName WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release Isto é parte de um processo longo e doloroso para encapsular fortemente as partes internas do tempo de execução Java. https://blogs.oracle.com/javamagazine/java-runtime-encapsulation-internals?source=:em:nw:mt::::RC_WWMK200429P00043:NSL400155430&elq_m id=192018&sh=082613230912082613230912201826241214150423100112&cmid=WWMK200429P00043C0026 23
  • 24.