Sistemas Distribuídos – Java 8 Luiz Felipe de Andrade Malmonge – 55987
Rafael B. Januzi – 55951
Victor Ronconi - 55959
UNIFESP | Sistemas Distribuídos - Java 8 1/20
Introdução
Sem grandes mudanças desde 2004 (Java 5) - 50 novas funcionalidades
2/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Mudanças
Alterações em vários níveis. - Linguagem - Biblioteca - JVM
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Melhor produtividade - Muito código para pouca coisa
3/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Motivação
Melhorar a legibilidade do código - Facilitar a manutenção
Melhorar a utilização multi-core/processor - Menos diferenças entre o código concorrente e paralelo
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Expressões Lambda
4/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Linguagem
Default methods
Anotações em parâmetros
Melhoria na funcionalidade Generics
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Derivada da programação funcional – “Functional Style”
5/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Lambda (I)
Grande redução do tamanho do código
Substitui classes aninhadas anônimas
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Exemplo:
6/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Lambda (II)
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Adição de novos métodos em interfaces - Sem quebra de compatibilidade
7/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Default Methods (I)
UNIFESP | Sistemas Distribuídos - Java 8
Provê Herança Múltipla Comportamental - Dois objetos com a mesma interface podem executar métodos diferentes - O compilador sempre sabe qual chamar
Introdução
Problema anterior ao Java 8: - Interface A - Classes B e C implementam a interface - É adicionado um método na interface A - Error! É necessário implementar o novo método em B e C
8/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Default Methods (II)
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Com o Java 8 - Implementação default do novo método (Error)
9/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Default Methods (III)
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Anotar parâmetros de métodos - Implementação default do novoVerificação de Null Pointers - Verificação de Condições de corrida
10/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Annotations
UNIFESP | Sistemas Distribuídos - Java 8
Maior chance de detectar erros
Introdução
Melhora inferência de tipos - Corrige problema do tipo:
11/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Generics <T>
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Adicionar as expressões Lambda - Atualizar 4024 classes! - Melhoria de performance
12/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Bibliotecas (I)
UNIFESP | Sistemas Distribuídos - Java 8
Demonstrar boas práticas com as novas funcionalidades
Introdução
Variáveis de atualização escaláveis - DoubleAccumulator e DoubleAdder - Mais atualizações (Adições) do que leituras - Cada thread mantem uma cópia da variável - Lock e acumula todas as alterações em uma única variável apenas quando houver uma leitura (menor overhead)
13/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Bibliotecas (II)
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Atualizações no ConcurrentHashMap - Melhorias no suporte à exploração - Melhorias da computação de chaves
14/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Bibliotecas (III)
UNIFESP | Sistemas Distribuídos - Java 8
Melhorias no ForkJoinPool - Threads aguardando I/O são colocados juntas em uma única thread melhorando a eficiência
Introdução
Operações em massas de dados para Collections - Principal razão para default methods - Filter, Map e Reduce - Recuperação de dados de maps (com streams) melhorada (serial ou paralela) - Implementações paralelas com framework Fork-Join
- Lazy evaluation, por exemplo, getFirst()
- parallelSort() em java.util.Arrays
15/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Bibliotecas (IV)
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Novas APIs para Date, Time e Calendar - Não haviam sido projetadas da melhor maneira - Datas parciais (07/05/X) - Períodos de tempo - Sistemas de calendários básicos, mas facilmente extensíveis
16/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Bibliotecas (V)
UNIFESP | Sistemas Distribuídos - Java 8
Codificação/Decoficação Base64 passa a ser nativa
Introdução
Profiles compactados - Permite utilizar apenas parte da JRE - Compact Profile 1, 2 e 3 - Sistemas embarcados com pouca memória disponível
17/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Bibliotecas (VI)
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Nashorn - Engine para JavaScript - Leve e com alta performance - Integrada à JRE
- Utiliza a javax.script - Comando jjs para execução de scripts
18/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Virtual Machine (I)
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Aposentadas combinações de Garbage Collection pouco utilizadas - DefNew + CMS - ParNew + SerialOld - Incremental CMS
- Não são removidas, mas irão gerar mensagens deprecated
19/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Virtual Machine (II)
UNIFESP | Sistemas Distribuídos - Java 8
Introdução
Video da Oracle: https://www.youtube.com/watch?v=DCBIegEqKuo
20/20
Introdução Fundamentação Teórica Teste de Unidade de Fluxo de Dados Plano de Atividades
Referências
UNIFESP | Sistemas Distribuídos - Java 8
Tutoriais da Oracle: http://docs.oracle.com/javase/tutorial/
Overview do Java 8 http://www.oracle.com/technetwork/java/javase/overview/java8-2100321.html
Curso: http://blog.caelum.com.br/o-minimo-que-voce-deve-saber-de-java-8/
Top Related