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

Java 9 ao 17 - Oracle no TDC

Java 9 ao 17 - Oracle no TDC

Rodrigo Graciano

December 01, 2021
Tweet

More Decks by Rodrigo Graciano

Other Decks in Programming

Transcript

  1. Java 9 to 17: O que vem por aí? Rodrigo

    Graciano rodrigograciano
  2. • Professional with 10+ years • Principal Software Engineer •

    NYJavaSIG Leader • graciano.dev • Twitter: @rodrigograciano Rodrigo Graciano 3
  3. Local Variable Type Inference - var • var não é

    um tipo de variável • Não é um atributo de classe • Não tem relação com var/val from Scala/Kotlin • Deve ser inicializado • Não é uma palavra reservada Antes: String name = “Java”; Depois: var name = “Java”; 12
  4. Local Variable Type Inference - var Antes: Map<String, List<String>> citiesLivedIn

    = Map.of("Rodrigo", of("São Paulo", "Rio de Janeiro", "Porto Alegre", "Nova Jersey", "Nova York")); Depois: var citiesLivedIn = Map.of("Rodrigo", of("São Paulo", "Rio de Janeiro", "Porto Alegre", "Nova Jersey", "Nova York")); 13
  5. Collections API - Immutable Factory Methods Before: List<Integer> numbers =

    new ArrayList<>(); numbers.add(1); numbers.add(2); Set<String> cities = new HashSet<>(); cities.add(“New York”); cities.add(“Boston”); Map<String, Integer> numbersMap = new HashMap<>(); numbersMap.put(“One”,1); After: List<Integer> numbers = List.of(1,2,3); Set<String> cities = Set.of(“New York”, “Boston”); Map<String, Integer> mapOfIntegers = Map.of(“One”,1,”Two”,2); 14
  6. Por que preferimos Immutable Collections • Um objeto é considerado

    imutável se seu estado não pode mudar depois de ser construído • Depois de criar uma instância de uma collection imutável, ela irá possuir os mesmos dados enquanto a collection existir • São mais eficientes já que não precisam se preocupar com alteração dos dados • Geralmente consumem menos memória que collections mutáveis 17
  7. Modules - Java 9 • Jigsaw • Divide a JDK

    em partes - módulos • Módulo principal é o java.base • NÃO É MANDATÓRIO usar módulos • Java 100% backward compatible Por que módulos? • Configuração é confiável • Forte encapsulamento • Permite que a plataforma Java seja escalável • Maior integridade da plataforma • Melhoria de performance 18
  8. Outras mudanças • Remove os módulos Java EE e CORBA

    • Interfaces pode ter métodos privados (estáticos e não estáticos) • Melhorias a Optional, try-with resources, Streams e Javadoc (HTML 5) • Reactive Streams API • HTTP2 • Flight Recorder • JShell • Single file source code programs 19
  9. Preview and Final Features, LTS, Non-LTS. 20 • Release cadency

    changed at Java 10 • New Java release every 6 months • LTS versions 8, 11, 17, 21 or 23 - discussions ongoing • Oracle JDK, OpenJDK, Correto, AdoptOpenJDK, Zulu, and more
  10. Sealed Class • Permite ao autor de uma classe ou

    interface ter o controle de qual código é responsável por implementá-lo • Provém um modo mais declarativo do que modificadores de acesso para restringir o uso de uma superclasse • Suporte para futuras implementações do pattern matching ao prover uma fundação para padrão de análises exaustivas • Possibilidade de ter uma super classe ser largamente acessível mas não largamente extensível 22
  11. Records • Records são data classes imutáveis que requerem apenas

    o tipo e nome das propriedades • Records não podem usar "extends" a não ser ao implementar interfaces • Records não são serializáveis por padrão • java.lang.Class API foi modificada para suportar. Por exemplo, dado Class<?>, podemos verificar se é um Record ou não usando o novo método isRecord() • Records geram getters públicos em que o nome é igual ao nome da propriedade (instead of getAge(), age()) 24
  12. Pattern Matching • Pattern matching involve testar quando um objeto

    tem uma dada estrutura, extraindo dados desse objeto. • Você já pode fazer isso com Java, contudo pattern matching introduz melhorias que possibilitam extrair condicionalmente os dados de uma forma mais concisa e robusta. 27
  13. Switch Expressions var result = switch (month) { case JANUARY,

    JUNE, JULY -> 3; case FEBRUARY, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER -> 1; case MARCH, MAY, APRIL, AUGUST -> { int monthLength = month.toString().length(); yield monthLength * 4; } default -> 0; }; 29
  14. Resumo de mudanças ao Garbage Collection • Concurrent Mark and

    Sweep (CMS) • G1 (Garbage First Collector) • Experimental JIT Compiler - Graal (AOT) • Epsilon GC • Z GC - Java 11 • Shenandoah GC - Java 12 34
  15. Outras mudanças • OpenJDK migrado para o Github • JFR

    Streaming • Hidden Classes • Vector API • Strongly encapsulated JDK Internals • Deprecate Security Manager for removal • Enhanced Pseudo-Random Number Generators 35
  16. What about Project Loom? Project Loom is to intended to

    explore, incubate and deliver Java VM features and APIs built on top of them for the purpose of supporting easy-to-use, high-throughput lightweight concurrency and new programming models on the Java platform. • Virtual threads • Not mapped to OS threads 36