Slide 1

Slide 1 text

@rodrigograciano Java 9 ao 15 A evolução da linguagem Java Rodrigo Graciano speakerdeck.com/graciano

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

@rodrigograciano O tempo não para 8

Slide 4

Slide 4 text

@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

Slide 5

Slide 5 text

@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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

@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

Slide 8

Slide 8 text

@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

Slide 9

Slide 9 text

@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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

@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

Slide 12

Slide 12 text

@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

Slide 13

Slide 13 text

@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

Slide 14

Slide 14 text

@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

Slide 15

Slide 15 text

@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

Slide 16

Slide 16 text

@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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

@rodrigograciano Switch Expressions 12

Slide 20

Slide 20 text

@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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

@rodrigograciano Records 14

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

@rodrigograciano Records (3) 14

Slide 28

Slide 28 text

@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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

@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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

@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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

@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

Slide 36

Slide 36 text

@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

Slide 37

Slide 37 text

@rodrigograciano FIM ugraciano.dev uTwitter: @rodrigograciano