Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java 9 ao 15 - Evolução da Linguagem Java

Java 9 ao 15 - Evolução da Linguagem Java

Presentation on the main changes that happened between Java 9 to Java 15 (in Portuguese)

Rodrigo Graciano

October 28, 2020
Tweet

More Decks by Rodrigo Graciano

Other Decks in Programming

Transcript

  1. @rodrigograciano Java 9 ao 15 A evolução da linguagem Java

    Rodrigo Graciano speakerdeck.com/graciano
  2. @rodrigograciano Você sabia? uJava 8 lançado em Março de 2014

    u85% usa Java 8 ou anterior * uAlguém usando Java 9+ em PROD? u https://www.jetbrains.com/lp/devecosystem-2020/java/
  3. @rodrigograciano Sobre mim u Profissional com 10+ anos de experiência

    u Principal Software Engineer - NY u Líder do NYJavaSIG u graciano.dev u Twitter: @rodrigograciano
  4. @rodrigograciano O que veremos hoje? Principais mudanças pós Java 8

    Mas não são todas? 7 versões – Java 15 – Setembro 2020 100+ JEP’s apenas no Java 9
  5. @rodrigograciano Java 9 9 Setembro de 2017 Previsão inicial -

    Setembro de 2016 3 anos após Java 8 Número enorme de mudanças – 100+
  6. @rodrigograciano Jigsaw - JPMS u Previsto para Java 7 u

    11 Java Enhancement Proposals (JEP’s) u Visa reduzir o tamanho dos pacotes u Divide a JDK em pedaços – Módulos u Módulo Principal (Root) é java.base u It’s Java – 100% backwards compatible 9
  7. @rodrigograciano Garbage First Collector - G1 u Escolha default a

    partir do Java 9 u Substitui Concurrent Mark Swap (CMS) – Stop the world u Tempo de pausa menor u Memória dividida em regiões entre 1-32MB u Objectivo é ter 2048 regiões (Heap) 9
  8. @rodrigograciano Collections – Factory Methods u Reduz o “boilerplate” u

    Retorna Immutable collections u List<Integer> números = List.of(1,2,3); u Set<String> cidades = Set.of("Recife", "São Paulo”); u Map<String, Integer> m2 = Map.ofEntries( Map.entry("A",1), Map.entry("B",2) ); 9
  9. @rodrigograciano JShell 9 u Ferramenta de fácil uso u Importante

    para o ensino da linguagem u Read-Eval-Print-Loop
  10. @rodrigograciano Outros u Interfaces podem ser métodos privados (static and

    non-static) u Reactive Streams API u Melhorias para Optional, try-with resources, streams e Javadoc u HTTP2 9
  11. @rodrigograciano Java 10 10 Março de 2018 Primeiro release usando

    o novo modelo – Cada 6 meses Feature Release – Não é LTS 12 JEP’s
  12. @rodrigograciano Local Variable Type Inference (var) u var é um

    tipo de variável u Não pode ser atributo da classe u Não tem relação com var/val do Scala/Kotlin u String nome = “Rodrigo”; u var nome = “Rodrigo”; u var myMap = new HashMap(); //Map<Object, Object>() u Precisa ser inicializado – var idade; //Não válido u var var = “var”; 10
  13. @rodrigograciano Outros u Experimental JIT Compiler – Graal Ahead-of-Time (AOT)

    u Parallel G1 GC para melhorar performance do full GC u AppCDS para melhorar start-up time u Novas API’s para criação de coleções u List.copyOf(), Set.copyOf(), e Map.copyOf() u Stream API pode coletar dados em um coleção não modificável u toUnmodifiableList(), toUnmodifiableSet(), e toUnmodifiableMap() 10
  14. @rodrigograciano Java 11 11 Setembro de 2018 LTS – Próximo

    LTS será Java 17 Java EE -> Jakarta EE Código do Java EE foi separado do repositório
  15. @rodrigograciano GC’s u Epsilon GC – no-op collector. Perfeito para

    benchmark u Z GC – Experimental de baixa latência uFunciona com heaps pequenas até Terabytes uPausa não deve exceder 10ms 11
  16. @rodrigograciano Outros u Shenandoah GC – Tempo de pausa constante-

    Experimental u Microbenchmark Suite - baseado no JMH u Default CDS Archives – Melhora o tempo para gerar um arquivo CDS u Melhorias ao G1. Retorna memória quando aplicação está idle. Antes apenas com Full GC 12
  17. @rodrigograciano Outros u Switch Expression – 2nd preview u Melhorias

    ao ZGC u Reimplementação da API Legada Socket 13
  18. @rodrigograciano Helpful NPE u Mensagens de NPE mais claras u

    É possível saber qual objeto é null list.get(0).getNome().trim(); u Mas quem é null? Lista? Nome? Cannot invoke "String.trim()" because the return value of "dev.graciano.Pessoa.getNome()" is null 14
  19. @rodrigograciano Pattern Matching for instanceOf u Não precisa fazer cast

    após instanceOf if (p instanceOf Pessoa pessoa) { pessoa.getNome(); } 14
  20. @rodrigograciano Outros u JFR Streaming u Switch Expression – Versão

    final u Text Blocks – 2nd Preview u ZGC no Windows e MacOS u Remove Concurrent Market Sweep GC (CMS) 14
  21. @rodrigograciano Sealed Classes u Permite controlar quem pode extender/implementar uma

    classe/interface public abstract sealed class Shape permits Circle, Square, Triangle {…} 15
  22. @rodrigograciano Outros u ZGC e Shenandoah não mais experimentais u

    Text Blocks não mais Preview Feature u Hidden classes u 2nd Preview de Records u 2nd Preview de Pattern Matching para instanceOf 15
  23. @rodrigograciano Java 16 16 Março de 2021 Feature Release 8

    JEPS’s confirmadas – por enquanto 4 JEP’s planejadas – por enquanto
  24. @rodrigograciano Novidades 16 u Migração do OpenJDK do Mercurial para

    Git (GitHub) u Melhorias ao ZGC u Vector API u Versão final de Records – Proposta u Versão final de Pattern Matching para instanceOf - Proposta
  25. @rodrigograciano Voltando ao Java 10/11 import java.nio.charset.*; public class Unicode

    { public static void main(String... args) { System.out.print(”Hora da \uD83C\uDF7A"); System.out.println(" ou do \u2615"); } } 10/11 Slide extraído de https://speakerdeck.com/boyarsky