@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/
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@rodrigograciano Sealed Classes u Permite controlar quem pode extender/implementar uma classe/interface public abstract sealed class Shape permits Circle, Square, Triangle {…} 15
@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
@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
@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