O documento descreve as principais mudanças introduzidas na versão 8 do Java, incluindo novas funcionalidades na linguagem como expressões lambda, métodos default em interfaces, e anotações em parâmetros. Também apresenta melhorias nas bibliotecas padrão como coleções paralelas e APIs para datas e na máquina virtual Java. O objetivo foi melhorar a produtividade, legibilidade e aproveitamento de processadores multicore.
1. 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
2. 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
3. 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
4. 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
5. 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
7. 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
8. 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
9. 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
10. 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
11. 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
12. 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
13. 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
14. 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
15. 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
16. 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
17. 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
18. 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
19. 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
20. 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/