sistemas distribuidos java_8

20
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

Upload: luiz-malmonge

Post on 05-Aug-2015

182 views

Category:

Technology


1 download

TRANSCRIPT

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/