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

    View Slide

  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/

    View Slide

  3. @rodrigograciano
    O tempo não para 8

    View Slide

  4. @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

    View Slide

  5. @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

    View Slide

  6. @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+

    View Slide

  7. @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

    View Slide

  8. @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

    View Slide

  9. @rodrigograciano
    Collections – Factory Methods
    u Reduz o “boilerplate”
    u Retorna Immutable collections
    u List números = List.of(1,2,3);
    u Set cidades = Set.of("Recife", "São Paulo”);
    u Map m2 =
    Map.ofEntries(
    Map.entry("A",1),
    Map.entry("B",2)
    );
    9

    View Slide

  10. @rodrigograciano
    JShell 9
    u Ferramenta de fácil uso
    u Importante para o
    ensino da linguagem
    u Read-Eval-Print-Loop

    View Slide

  11. @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

    View Slide

  12. @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

    View Slide

  13. @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()
    u Precisa ser inicializado – var idade; //Não válido
    u var var = “var”;
    10

    View Slide

  14. @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

    View Slide

  15. @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

    View Slide

  16. @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

    View Slide

  17. @rodrigograciano
    Outros
    11
    u Flight Recorder
    u Melhorias para
    programas com
    apenas uma única
    classe

    View Slide

  18. @rodrigograciano
    Java 12
    12
    Março de 2019
    Feature Release
    Preview Features
    Pequeno Release - 8 JEP's

    View Slide

  19. @rodrigograciano
    Switch Expressions 12

    View Slide

  20. @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

    View Slide

  21. @rodrigograciano
    Java 13
    13
    Setembro de 2019
    Feature Release
    Preview Features
    Apenas 5 JEP's

    View Slide

  22. @rodrigograciano
    Text Blocks 13
    u Antes Text Blocks u Com Text Blocks

    View Slide

  23. @rodrigograciano
    Outros
    u Switch Expression – 2nd preview
    u Melhorias ao ZGC
    u Reimplementação da API Legada Socket
    13

    View Slide

  24. @rodrigograciano
    Java 14
    14
    Março de 2020
    Feature Release
    Preview e Final Features
    16 JEP's

    View Slide

  25. @rodrigograciano
    Records 14

    View Slide

  26. @rodrigograciano
    Records (2)
    u Imutável
    u Reduz o boilerplate
    14

    View Slide

  27. @rodrigograciano
    Records (3) 14

    View Slide

  28. @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

    View Slide

  29. @rodrigograciano
    Pattern Matching for instanceOf
    u Não precisa fazer cast após instanceOf
    if (p instanceOf Pessoa pessoa) {
    pessoa.getNome();
    }
    14

    View Slide

  30. @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

    View Slide

  31. @rodrigograciano
    Java 15
    15
    Setembro de 2020
    Feature Release
    Preview e Final Features
    14 JEP's

    View Slide

  32. @rodrigograciano
    Sealed Classes
    u Permite controlar quem pode
    extender/implementar uma classe/interface
    public abstract sealed class Shape
    permits Circle, Square, Triangle {…}
    15

    View Slide

  33. @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

    View Slide

  34. @rodrigograciano
    Java 16
    16
    Março de 2021
    Feature Release
    8 JEPS’s confirmadas – por enquanto
    4 JEP’s planejadas – por enquanto

    View Slide

  35. @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

    View Slide

  36. @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

    View Slide

  37. @rodrigograciano
    FIM
    ugraciano.dev
    uTwitter: @rodrigograciano

    View Slide