Java 9

Light Talking:

Uma visão geral sobre
as novas funcionalidades

? para ajuda, espaço para navegar

2017-03-28
SouJava
Grupo de usuários Java
Dica: arquivo e JEP são links diretos
Creative Commons Lizenzvertrag
Apresentação do Java 9 e uma visão geral sobre os novos recursos por SouJava
licenciado por Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.. Baseado em partes do trabalho da Reveal.JS.
## Especificação
##### Especificação - **82** JEP targeted - GA Release: ~~2016-09-22~~ **2017-03-23** - Brewing since: 2014-08-11
##### Destaques - Jigsaw - Tooling - HTTP API - Detalhes da linguagem
# FERRAMENTAS

Exemplo de uma busca no HTML5 Javadoc

Example Java 9 Javadoc output with HTML5 enabled
## Detalhes da linguagem
### Controle de Processo ````java
// Obtendo o próprio PIDs ou de processos já iniciados
                    out.println("Your pid is " + ProcessHandle.current().getPid());

                    Process p = Runtime.getRuntime().exec("sleep 1h");
                    ProcessHandle h = ProcessHandle.of(p.getPid())  // Opcional
                            .orElseThrow(IllegalStateException::new);

                    // Fazendo algo ao sair de um processo        // CompletableFuture
                    h.onExit().thenRun( ()-> out.println("Sleeper exited") );

                    // Pegando informação do processo
                    out.printf("[%d] %s - %s\n", h.getPid(),
                               h.info().user().orElse("unknown"),
                               h.info().commandLine().orElse("none"));

                    // Finalizando o processo
                    h.destroy();
````
### Fábricas de coleções imutáveis ````java
/* Seções de comentários iriam quebrar ... */
                    List<Integer> listOfNumbers = List.of(1, 2, 3, 4, 5/*, null*/);

                    Set<Integer> setOfNumbers = Set.of(1, 2, 3, 4, 5/*, 1*/);

                    Map<String, String> mapOfString =
                        Map.of("key1", "value1", "key2", "value2");

                    Map<String, String> moreMapOfString =
                        Map.ofEntries(
                            Map.entry("key1", "value1"),
                            Map.entry("key2", "value2")/*,
                            Map.entry("key1", "value3")*/
                    );
                    ````
                
### StackWalker ````java
// retorno de classe/método somente para nossas classes.
                    private static List<String> walkAndFilterStackframe() {
                      return StackWalker.getInstance().walk(s ->
                        s.map( frame-> frame.getClassName()+"/"+frame.getMethodName())
                               .filter(name -> name.startsWith("de.exxcellent"))
                               .limit(10)
                               .collect(Collectors.toList()) );
                    }
````
### Novas Utilidades para o Input Stream ````java
// Todos os bytes de um InputStream de uma só vez
                    byte[] result = new ByteArrayInputStream(buf)
                        .readAllBytes();

                    // Diretamente redirecionado de um InputStream para um OutputStream
                    new ByteArrayInputStream(buf)
                        .transferTo(System.out);
````
### HTTP/2 Client ````java /** * A API HTTP funciona de forma assíncrona e síncrona. No * modo assíncrono, o trabalho é executado em threads (ExecutorService). */ public static void main(String[] args) throws Exception { HttpClient.getDefault() .request(URI.create("https://www.exxcellent.de")) .GET() .responseAsync() // CompletableFuture :D .thenAccept(httpResponse -> out.println(httpResponse.body(HttpResponse.asString())) ); Thread.sleep(999); // Dê algum tempo para a thread trabalhar. } ````
# Jigsaw
### Ferramentas - Lista módulos incorporados: `java –listmods` - Buscando dependências: `jdeps –jdkinternals app.jar`
### Recursos - [Breve resumo da JVM ](http://cr.openjdk.java.net/~mr/jigsaw/ea/module-summary.html) - [O estado do módulo de sistema](http://openjdk.java.net/projects/jigsaw/spec/sotms/)
## Muitos Detalhes (obscuros)