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
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
## 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)
