Java (9)
As novidades da nova versão do Java
Rodrigo Cândido da Silva
@rcandidosilva
Agenda
• Modularidade (Jigsaw)
• Collection Factories
• Private Interface Methods
• Reactive Streams
• Process API
• HTTP/2
• JShell
• …
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 ???
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
Modularidade (Jigsaw)
Java SE 9 Modules
JDK/JRE File Structure
Modularidade (Jigsaw)
• O que é um módulo?
Modularidade (Jigsaw)
Modularidade (Jigsaw)
Modularidade (Jigsaw)
Java SE 8 Java SE 9
• Estrutura das aplicações
JLink
JLink
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
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")
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();
}
}
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
};
Reactive Streams
Sync
Async
Reactive Streams
• Suporte à programação reativa
- http://reactivestreams.org
• Interface Flow com suporte à publish-
subscribe
- Publisher, Subscriber,
Processor, Subscription
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();
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());
JShell
• REPL (Read-Eval-Print-Loop)
• Novo comando adicionado no JDK: jshell
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) { }
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
Stream Enhacements
• dropWhile() / takeWhile()
• Improved iterate
• Parallel Files.lines()
• Stream from Optional
Javadoc Improvements
• Formato compatível com HTML5 markup
• Suporte a definição dos módulos (Jigsaw)
• Adicionado um novo mecanismo de consulta
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")
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
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
Compact Strings
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…
Perguntas
?
Obrigado !
@rcandidosilva

As novidades da nova versão do Java 9

  • 1.
    Java (9) As novidadesda nova versão do Java Rodrigo Cândido da Silva @rcandidosilva
  • 2.
    Agenda • Modularidade (Jigsaw) •Collection Factories • Private Interface Methods • Reactive Streams • Process API • HTTP/2 • JShell • …
  • 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.
    Modularidade (Jigsaw) • TornaJava 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.
  • 6.
    Java SE 9Modules
  • 7.
  • 8.
    Modularidade (Jigsaw) • Oque é um módulo?
  • 9.
  • 10.
  • 11.
    Modularidade (Jigsaw) Java SE8 Java SE 9 • Estrutura das aplicações
  • 12.
  • 13.
  • 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.
    Collection Factories • Novosmé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.
    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.
    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.
  • 19.
    Reactive Streams • Suporteà programação reativa - http://reactivestreams.org • Interface Flow com suporte à publish- subscribe - Publisher, Subscriber, Processor, Subscription
  • 20.
    Process API • Melhoriasna 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.
    HTTP/2 • Suporta conexõespersistentes, 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.
    JShell • REPL (Read-Eval-Print-Loop) •Novo comando adicionado no JDK: jshell
  • 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.
    Enhanced Deprecation • @Deprecatedanotaçã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.
    Stream Enhacements • dropWhile()/ takeWhile() • Improved iterate • Parallel Files.lines() • Stream from Optional
  • 26.
    Javadoc Improvements • Formatocompatível com HTML5 markup • Suporte a definição dos módulos (Jigsaw) • Adicionado um novo mecanismo de consulta
  • 27.
    Unicode 7.0/8.0 • Unicode7: 2.834 new characters • Unicode 8: 7.716 new characters • Suporte à UTF-8 nos property files string .replaceAll("🚗 ", "value") .replaceAll("🚫 ", “nextValue")
  • 28.
    Security Enhancements • Melhoriaperformance 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.
    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.
  • 31.
    Other Features • MillingProject 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.
  • 33.