Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DigitalOcean Meetup Recife -Java 9 e Modularidade

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for Nancy Lyra Nancy Lyra
September 12, 2017

DigitalOcean Meetup Recife -Java 9 e Modularidade

DigitalOcean Meetup Recife -Java 9, Modularidade e os sabores da DigitalOcean

Avatar for Nancy Lyra

Nancy Lyra

September 12, 2017

More Decks by Nancy Lyra

Other Decks in Programming

Transcript

  1. Quem sou eu na fila do pão? • Bacharela em

    Ciências da Computação (CIn/UFPE - 2006) • Mestre em Inteligência Artifical (CIn/UFPE - 2009) • ”Doutoranda” em Linguagens de Programação (CIn/UFPE - ????) • Professora de Programação (FASE/Nabuco – desde 2010 até maio/17) • Instrutora/Consultora Java (Liferay – desde 2015) • Resumindo: 15 anos desde o primeiro contato com Java • Mas nem tudo são flores
  2. Mas o que é JAVA? • Linguagem de Programação +

    Plataforma de Desenvolvimento Programming Language 2017 2012 2007 2002 1997 1992 1987 Java 1 2 1 1 15 - - C 2 1 2 2 1 1 1 C++ 3 3 3 3 2 2 5 C# 4 4 7 13 - - - Python 5 7 6 11 27 - - Visual Basic .NET 6 17 - - - - - PHP 7 6 4 5 - - - JavaScript 8 9 8 7 23 - - Perl 9 8 5 4 4 10 - Assembly language 10 - - - - - - COBOL 25 28 17 9 3 9 9 Lisp 31 12 15 12 9 4 2 Prolog 32 31 26 16 20 11 3 Pascal 114 15 21 97 8 3 4
  3. O grande trunfo? • Portabilidade • Outros: • JavaCard (SIM

    Cards) • JavaTV • JavaCar • LeJOS • Open: Java Community Process • Liferay J
  4. Plataforma de alta popularidade Principalmente no escopo web. Cerca de

    nove milhões de desenvolvedores adotam o Java. Completou 22 anos em maio Classificada como antiga e estável Robusta e confiável Projetada com alguns conceitos obsoletos e uma estrutura monolítica. Diecil o reuso e a manutenção do código Problemas em dispositivos de baixa capacidade de processamento. Sim, ok. Mas…
  5. Um pequeno detalhe: • A plataforma evoluiu: • Sistema (dispositivos

    embarcados) para uma rica coleção de bibliotecas • Trouxe problemas • Tamanho: O JDK sempre foi disponibilizado como um grande e indivisível artefato de software. Ao longo dos anos só aumentou • Complexidade: O JDK é profundamente interconectado, ou seja, as bibliotecas são muito dependentes umas das outras, compondo assim uma estrutura monolítica.
  6. O tamanho do desafio: • A estrutura apresenta também conexões

    inesperadas entre APIs e suas respectivas implementações • Consequência imediata: • Alto tempo de inicialização • Alto consumo de memória • Degradação do desempenho das aplica ções • Para se ter uma ideia, o ”Alô mundo” • Carrega e inicializa mais de 300 classes • Gasta, em média, 100ms em uma máquina desktop.
  7. Aí está o GRANDE trabalho: Aprimorar o tempo de inicialização

    e o consumo de memória. • Conjunto de módulos separados e independentes. • Idenpficar interconexões entre bibliotecas • Eliminar dependências quando possível. Com esse objetivo, a Oracle optou por dividir o JDK • Apenas os módulos necessários para inicializar a aplicação serão carregados. • Uplização de módulos poderá ser empregada não apenas pelo JDK, mas também por bibliotecas e aplicações. Consequências do JDK modular
  8. Módulos do JDK • Um aplicação pode conter apenas alguns

    módulos (benefício para dispostivos que requerem executáveis menores) • Único módulo obrigatório (é o core): java.base
  9. JDKs hoje em produção • JDK 9 EA (Early Adoption)

    • JDK 8 • JDK 7 (A maioria) • JDK 6 • JDK 5.0 ou anteriores
  10. Informações atuais sobre JDK 9 2017/01/05 Priorização e correção dos

    bugs Rampdown Start 2017/02/09 All Tests Run 2017/02/16 Zero Bug Bounce 2017/03/16 Priorização e correção dos bugs Rampdown Phase 2 2017/07/06 Final Release Candidate 2017/07/27 2017/09/21 General Availability JSRs que envolvem Modularidade 200: The Modular JDK (Jigsaw/JSR 376 and JEP 261) 201: Modular Source Code 220: Modular Run-Time Images 238: Multi-Release JAR Files 259: Stack-Walking API 261: Module System 275: Modular Java Application Packaging 282: jlink: The Java Linker
  11. Timeline do JDK 9 JEPs bem sucedidas podem então ser

    convertidas em pedidos de padronização no JSR ou incluídas em padrões existentes JEP - escopo menor e mais focado que as JSR. Oracle anunciou o primeiro grupo de JEPs para o Java 9 (Java Enhancement Proposal) em agosto de 2014.
  12. E quanto à modularidade? • JEP 201 (Código Fonte Modular),

    ainda não era neste momento o projeto Jigsaw prometido para versões anteriores do Java – mas sim um trabalho de limpeza no JDK preparando as bases para a modularidade. • Essa JEP estabeleceu limites claros para cada módulo ao mesmo tempo que o próprio JDK está sendo construído.
  13. O que tem de novidades no Java 9? • Projeto

    Jigsaw • Mas não é só isso • Suporte a HTTP/2 • A versão 2.0 do HTTP foi disponibilizada já há algum tempo, baseada na implementação do protocolo SPDY do Google, o qual recebeu críticas muito positivas, pois possibilita a aceleração da navegação na web. • REPL (Read–Eval–Print Loop) • Permite a desenvolvedores testar códigos interativamente, sem a necessidade de se preocupar com estruturas de classes e compiladores • Novas técnicas de garbage collection • Garbage First (também conhecido como G1GC) promete suportar heaps imensos com o mínimo de interrupções
  14. Principal feature no jdk 9: Jigsaw(JSR 376) Carro-chefe do Java

    9 (nosso objetivo aqui hoje): Destinado a trazer programação modular Depois de anos de negociações e múltiplas JSRs e JEPs, o projeto está assumindo sua forma final
  15. Projeto Jigsaw • Características fundamentais: 1. Configuração confiável (Reliable configuration):

    • Substituição do mecanismo de classpath padrão a fim de evitar conflitos; • No more ClassNotFoundException J Será? 2. Forte encapsulamento (Strong encapsulation): • Permissão para um componente de um módulo declarar quais dos seus tipos declarados como públicos são acessíveis a outros módulos.
  16. Mas o que são módulos? • Um novo tipo de

    componente java (Um nível de abstração maior, em cima de package) • Possui um nome e um código descritivo • Deve informar se faz uso de tipos (classes, interfaces ou pacotes) de outros módulos • Como? Cláusula requires. • Além disso, pode ser necessário informar ao compilador quais tipos desse módulo podem ser acessados por outros. • Como? Cláusula exports.
  17. Ou seja: • A partir disso, o sistema de módulos

    localiza os módulos necessários e, ao contrário do sistema de classpath, garante que o código de um módulo acesse apenas os tipos dos módulos dos quais ele depende. • Também evita forte dependência (API – IMPL) • Um módulo pode declarar que utiliza (uses) uma interface (tipo genérico) em vez de uma classe (tipo específico) de um determinado serviço cuja implementação é fornecida (provided) em tempo de execução por outro modulo.
  18. Resolução e Dependência • Uma aplicação depende de um módulo

    que depende de java.sql, por ex. • Que por sua vez, depende de outros módulos, e assim recursivamente, até todas as dependências resolvidas. • Isso gera um grafo • Obs. O compilador consegue identificar dependência cíclica • Se m1 referencia m2 e m3, e ambos referenciam z, ele só vai ser carregado 1 vez.
  19. Serviços (Capabilities) • A questão é: • Java tá tinha

    o ServiceLoader (Localiza provedores de serviço em tempo de execução na pasta META-INF/services) • Para dar suporte ao legado • Um módulo (com o mesmo nome do pacote) é criado para PROVER o serviço • Quando algum módulo requerer java.sql.Driver, por ex, ao invés de procurar em META-INF/services, que vai ter uma centenas de serviços, já acha diretamente no módulo que oferece o serviço.
  20. Classes Módulos Services Exports com.meetup.shi module com.meetup.foo requires com.meetup.shi uses

    com.meetup.bake Foo requer a class do módulo Shi. Foo usa a funcionalidade de com.meetup.bake. Provides com.meetup.bake Knead(); Bake();
  21. jShell (Java + REPL) • Ferramenta REPL de linha de

    comando para a linguagem Java • Possibilita a execução de declarações e expressões Java de forma interativa, sem classes ou métodos. • Ótima opção para iniciantes • Viabiliza experimentar algoritmos, criar protótipos ou até mesmo tentar utilizar uma nova API • Já pode ser testada por qualquer pessoa que baixar as versões early access do Java 9 (faz parte do projeto Kulla)