Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

As novidades da nova versão do Java 9

616 views

Published on

A versão do Java 9 acabou de ser lançada e traz muitas novidades e melhorias para a plataforma e na estrutura da linguagem. Novos recursos foram incorporados, como suporte à modularidade (Jigsaw), JShell, Stream API, Collection factories, dentre outros. Venha conhecer e acompanhar algumas demonstrações destes estes novos recursos em ação.

Published in: Technology

As novidades da nova versão do Java 9

  1. 1. Java (9) As novidades da nova versão do Java Rodrigo Cândido da Silva @rcandidosilva
  2. 2. Agenda • Modularidade (Jigsaw) • Collection Factories • Private Interface Methods • Reactive Streams • Process API • HTTP/2 • JShell • …
  3. 3. Java SE Timeline • [1994] JDK Alpha e Beta • [1996] JDK 1.0 (8 pacotes!) • [1996] JDK 1.1 • [1998] Java 2 (J2SE 1.2) • [2000] J2SE 1.3 • [2002] J2SE 1.4 • [2005] J2SE 5.0 • [2006] Java SE 6 • [2011] Java SE 7 • [2014] Java SE 8 •[2017] Java SE 9 • [2018] Java 18.3 ???
  4. 4. Modularidade (Jigsaw) • Torna Java SE mais escalável e flexível - IoT, Microservices • Minimiza classpath hell • Java standard classes foram modularizadas - rt.jar tem agora 94 módulos definidos • Possui alguns problemas de incompatibilidade com legado - Mas pode ser desligado durante a execução
  5. 5. Modularidade (Jigsaw)
  6. 6. Java SE 9 Modules
  7. 7. JDK/JRE File Structure
  8. 8. Modularidade (Jigsaw) • O que é um módulo?
  9. 9. Modularidade (Jigsaw)
  10. 10. Modularidade (Jigsaw)
  11. 11. Modularidade (Jigsaw) Java SE 8 Java SE 9 • Estrutura das aplicações
  12. 12. JLink
  13. 13. JLink
  14. 14. Multi-Release Jar Files • JAR pode conter versões diferentes de classes e resources • MANIFEST.MF contém Multi-Release: true • Subdiretório /META-INF/versions contém um diretório com número da versão
  15. 15. Collection Factories • Novos métodos adicionados para criação de coleções imutáveis -List, Set, Map List immutableList = List.of(); List immutableList = List.of("one","two","three"); Map emptyImmutableMap = Map.of() Map nonemptyImmutableMap = Map.of(1, "one", 2, "two", 3, "three")
  16. 16. Private Interface Methods • Possibilidade implementar métodos privados em interfaces interface InterfaceWithPrivateMethods { private static String staticPrivate() { return "static private"; } private String instancePrivate() { return "instance private"; } default void check() { String result = staticPrivate(); (new InterfaceWithPrivateMethods() {}).pvt.instancePrivate(); } }
  17. 17. Diamond Operator Extension • Pode ser utilizado agora em conjunto com classes anônimas FooClass<Integer> fc = new FooClass<>(1) { // anonymous inner class }; FooClass<? extends Integer> fc0 = new FooClass<>(1) { // anonymous inner class }; FooClass<?> fc1 = new FooClass<>(1) { // anonymous inner class };
  18. 18. Reactive Streams Sync Async
  19. 19. Reactive Streams • Suporte à programação reativa - http://reactivestreams.org • Interface Flow com suporte à publish- subscribe - Publisher, Subscriber, Processor, Subscription
  20. 20. Process API • Melhorias na API para controlar e gerenciar processos do sistema operacional ProcessHandle self = ProcessHandle.current(); long PID = self.getPid(); ProcessHandle.Info procInfo = self.info(); Optional<String[]> args = procInfo.arguments(); Optional<String> cmd = procInfo.commandLine(); Optional<Instant> startTime = procInfo.startInstant(); Optional<Duration> cpuUsage = procInfo.totalCpuDuration();
  21. 21. HTTP/2 • Suporta conexões persistentes, cabeçalhos mais eficientes dentre outra melhorias • Nova API adicionada: java.net.http - Substitui a antiga implementação HttpURLConnection URI httpURI = new URI("http://localhost:8080"); HttpRequest request = HttpRequest.create(httpURI).GET(); HttpResponse response = request.response(); String responseBody = response.body(HttpResponse.asString());
  22. 22. JShell • REPL (Read-Eval-Print-Loop) • Novo comando adicionado no JDK: jshell
  23. 23. Try-With-Resources • Não é mais necessário utilizar uma variável para ser gerenciada pela estrutura MyAutoCloseable mac = new MyAutoCloseable(); try (mac) { // do some stuff with mac } try (new MyAutoCloseable() { }.finalWrapper.finalCloseable) { // do some stuff with finalCloseable } catch (Exception ex) { }
  24. 24. Enhanced Deprecation • @Deprecated anotação suporta agora - since - String que define a partir de quando - forRemoval - indica que será removido na próxima versão - jdeprscan - JDK tool para deprecation scan - Applet API is deprecated now $ jdeprscan --class-path classes example.Deprecations class example/Deprecations uses type java/rmi/RMISecurityManager deprecated class example/Deprecations uses method javax/swing/JList getSelectedValues() deprecated
  25. 25. Stream Enhacements • dropWhile() / takeWhile() • Improved iterate • Parallel Files.lines() • Stream from Optional
  26. 26. Javadoc Improvements • Formato compatível com HTML5 markup • Suporte a definição dos módulos (Jigsaw) • Adicionado um novo mecanismo de consulta
  27. 27. Unicode 7.0/8.0 • Unicode 7: 2.834 new characters • Unicode 8: 7.716 new characters • Suporte à UTF-8 nos property files string .replaceAll("🚗 ", "value") .replaceAll("🚫 ", “nextValue")
  28. 28. Security Enhancements • Melhoria performance GHASH e RSA • Suporte para SHA-3 hash algorithm • TLS application-layer protocol negotiation • OCSP Stapling for TLS • PKCS12 key stores by default (replaced JKS) • Disabled SHA-1 certificate
  29. 29. G1 Garbage Collector • G1 é o coletor padrão agora • Multithreaded; com pausas mais curtas e previsíveis • Compacta o heap, reduzindo a fragmentação G1-GC Parallel GC
  30. 30. Compact Strings
  31. 31. Other Features • Milling Project Coin (JEP 213) • Stack-Walking API (JEP 259) • Annotations Pipeline 2.0 (JEP 217) • Parser API for Nashorn (JEP 236) • Unified JVM logging (JEP 158) • Spins-Wait Hints (JEP 285) • XML Catalog API (JEP 268) • etc…
  32. 32. Perguntas ?
  33. 33. Obrigado ! @rcandidosilva

×