SlideShare une entreprise Scribd logo
1  sur  44
Télécharger pour lire hors ligne
1   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
The Future of JVM
Performance Tuning
Ricardo S. Ferreira
Java, FMW & Engineered Systems Expert
ricardo.s.ferreira@oracle.com



2   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
The following is intended to outline our general product
               direction. It is intended for information purposes only, and
               may not be incorporated into any contract. It is not a
               commitment to deliver any material, code, or functionality, and
               should not be relied upon in making purchasing decisions.
               The development, release, and timing of any features or
               functionality described for Oracle’s products remains at the
               sole discretion of Oracle.




3   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Agenda


                   JVM, Threads, RAM, Heap e Garbage Collection
                   Os Algoritmos Clássicos de Garbage Collection
                   Overview sobre o Algoritmo G1: Garbage-First
                   Máximo Throughput usando Sockets Direct Protocol
                   OpenJDK: Contribuindo com o futuro da JVM



4   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Sobre o Palestrante
                                                                      http://blogs.oracle.com/middlewareplace


           Começou a desenvolver
                                                                                              @jricardoferreir
           software como profissão
           em 1997 (Delphi, C/C++)                                                            Procure por “Ricardo Ferreira”
           Trabalha com Java desde
           2002 (Em especial JEE)                                                             Procure por “Ricardo Ferreira”

           Red Hat, Progress Soft.
                                                                                              http://blogs.oracle.com/middlewareplace
           Respira constantemente
           tecnologia na Oracle                                                               http://youtube.com/rferreira12345tube
           Performance-Driven Guy
5   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
JVM, Threads, RAM, Heap
        & Garbage Collection (GC)




6   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
JVM, Threads, RAM, Heap e Garbage Collection
        Visão Geral sobre JVM & Threads

                                                                                              Sistema Operacional


                                 JVM 1                                                            JVM 2




7   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
JVM, Threads, RAM, Heap e Garbage Collection
        Visão Geral sobre RAM e Heap

    Layout de Memória pra JVM


                Kernel do
                                                                                  Heap (~75%)
               S.O (~10%)




               Código
                                                                                Threads (~5%)
            Nativo (~12%)



8   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
JVM, Threads, RAM, Heap e Garbage Collection
        Visão Geral sobre RAM e Heap

    Layout de Memória pra JVM
                                                                           Heap
                                                                               Eden           Old
            Kernel do S.O
                                                                               Perm           Stack




            Código Nativo                                                               Threads




9   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
JVM, Threads, RAM, Heap e Garbage Collection
         Visão Geral sobre Garbage Collection (GC)




                                                                                               Objeto   Objeto
                                                  0x9FFF0
             Roots




10   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
JVM, Threads, RAM, Heap e Garbage Collection
         Visão Geral sobre Garbage Collection (GC)

                                                                                               Objeto       Objeto
                                                  0x9FFF0
             Roots



              Foo* foo = new Foo();
                                                                                                            delete foo;


                                                                                      foo->doSomething();

11   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
JVM, Threads, RAM, Heap e Garbage Collection
         Visão Geral sobre Garbage Collection (GC)

                                                                                               Objeto       Objeto
                                                  0x9FFF0
             Roots



              Foo* foo = new Foo();
                                                                                                            delete foo;


                                                                                      foo->doSomething();

12   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
JVM, Threads, RAM, Heap e Garbage Collection
         Visão Geral sobre Garbage Collection (GC)

                                                               Sistema Operacional
                                                                                               GC são threads que executam
                                                                                               em baixa prioridade na JVM
                                  JVM 1                                                        Existem vários tipos de threads
                                                                                               de um GC, mas entre eles:
                                                                                                – Mutators: Responsáveis por
                                                                                                  alocar a memória e remanejar
                                                                                                  os ponteiros e referências
                                                                                                – Collectors: responsáveis por
                                                                                                  fazer a limpeza do espaço de
                                                                                                  memória alocado na Heap
13   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Os Algoritmos Clássicos
         de Garbage Collection (GC)




14   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Os Algoritmos Clássicos de Garbage Collection
         Overview sobre os Principais Algoritmos de GC Conhecidos

                                                  Algoritmos
                                                    de GC                                                        Todos esses algoritmos
                                                                                                                 possuem um objetivo ou
         Não                                                                                   Tempo             foco particular na JVM
                                                            Concorrentes                        Real
     Concorrentes
                                                                                                                 Algumas implementações
         Mark-Sweep                                                    Parallel                 Garbage-First    de GC são na prática
                                                                                                                 uma combinação destes
      Mark-Compact                                                 Concurrent                    Deterministic
                                                                                                                 algoritmos clássicos.
         Copying GC
                                                                                                                 É possível combinar os
           Reference                                                                                             algoritmos, desde que
           Counting
                                                                                                                 não ocorra trade-off.
15   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Os Algoritmos Clássicos de Garbage Collection
         Overview sobre os Principais Algoritmos de GC Conhecidos

                                                  Algoritmos
                                                    de GC


         Não                                                                                   Tempo
                                                            Concorrentes                        Real
     Concorrentes

         Mark-Sweep                                                    Parallel                 Garbage-First


      Mark-Compact                                                 Concurrent                    Deterministic


         Copying GC


           Reference
           Counting


16   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Overview sobre o Algoritmo
     G1: Garbage-First




17   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Qual é a “Grande Sacada” do G1?
         Principais Características do G1

                Executar o GC de forma concorrente
                aos threads da aplicação Java
                Usar compactação de espaço livre
                sem pênalti para o tempo de GC
                Usar paralelismo para melhorar o
                tempo de resposta da aplicação Java
                Possibilitar um tempo de GC mais
                próximo do tempo real possível
                Possibilitar o uso de áreas de heap
                maiores que 6 GB

18   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Overview sobre o G1 (Garbage-First)
         Oracle HotSpot Antes do G1
                                                                                               Young Generation
                                                                                                – Dividida em:
                  Eden                                               Survivors
                                                                                                     Eden Space
                                                                                                     2 Survivors
                                                                                               Old Generation
                                                                                                – Único e grande espaço contíguo
                           Old Generation                                                       – Desalocação no CMS ocorre no
                                                                                                  espaço e de forma concorrente
                                                                                                – “Stop-the-World” para executar uma
                                                                                                  compactação total e em paralelo

19   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Overview sobre o G1 (Garbage-First)
         Oracle HotSpot Depois do G1
                                                                                               Único espaço contínuo de memória
                                                                                               quebrado em múltiplas regiões de
                                                                                               tamanhos iguais
                                                                                               Tamanho da região dito pela JVM no
                                                                                               startup. Varia entre de 1 MB à 32 MB.




20   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Young GC no CMS (Parte 1)

                                                                                               Young Generation
                                                                                                – Dividida em 1 eden e 2 espaços de
                                                                                                  survivors (Foco em objetos recentes)
                                                                                               Old Generation
                                                                                                – Compactado apenas no Full-GC
                                                                                                – Desalocação é feita somente dentro
                                                                                                  da região da Old Generation




21   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Young GC no CMS (Parte 2)

                                                                                               Durante o Young GC
                                                                                                – Objetos recentes da Young são
                                                                                                  evacuados (copiados/movidos) para
                                                                                                     Outro espaço de survivor
                                                                                                     Old Generation
                                                                                                – Isso implica em “Stop-the-World”




22   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Young GC no CMS (Parte 3)

                                                                                               Final do Young GC
                                                                                                – Eden e 1 dos survivors devem estar
                                                                                                  completamente vazios (possivelmente)
                                                                                                – Objetos podem ter sido promovidos
                                                                                                  para a Old Generation




23   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Young GC no G1 (Parte 1)

                                                                                               Heap da JVM separada em regiões
                                                                                                – Média de regiões: 2 KB
                                                                                                – Cada região com 1 MB ou até 32 MB.
                                                                                                  Dá pra alterar com o argumento
                                                                                                  -XX:G1HeapRegionSize
                                                                                               Young e Old não precisam ser mais
                                                                                               contíguos. I/O aleatórios nas regiões.




24   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Young GC no G1 (Parte 2)
                                                                                               Durante o Young GC
                                                                                                – Objetos recentes da Young são
                                                                                                  evacuados (copiados/movidos) para
                                                                                                     Uma ou mais regiões de survivor
                                                                                                     Regiões do tipo Old Generation
                                                                                                – Isso implica em “Stop-the-World”
                                                                                                – Próximo tempo de GC é calculado




25   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Young GC no G1 (Parte 3)
                                                                                               Final da Young GC
                                                                                                – Objetos recentes da Young foram
                                                                                                  evacuados (copiados/movidos) para
                                                                                                     Zero ou mais regiões de survivor
                                                                                                     Regiões do tipo Old Generation
                                                                                                – Regiões do eden e survivor são
                                                                                                  potencialmente redimensionados




26   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
GC na Old usando CMS :: Depois do Marking (1)
                                                                                               Marcação feita de forma concorrente
                                                                                                – 2 pausas do tipo “Stop-theWorld”
                                                                                                     Marcação inicial
                                                                                                     Remarcação
                                                                                                – Marca objetos rastreáveis recentes
                                                                                                – Objetos não marcados são os que
                                                                                                  foram considerados mortos




27   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
GC na Old usando CMS :: Depois do Marking (2)
                                                                                               Sweeping feito de forma concorrente
                                                                                                – Executa o sweeping em todo o
                                                                                                  espaço reservado para Old Gen
                                                                                                – Desaloca objetos mortos que não
                                                                                                  foram marcados ou que foram
                                                                                                  marcados com a cor branca
                                                                                                – Não realiza nenhuma compactação




28   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
GC na Old usando CMS :: Depois do Marking (3)
                                                                                               Final da fase de sweeping
                                                                                               concorrente
                                                                                                – Todos os objetos não marcados são
                                                                                                  desalocados e têm seu espaço limpo




29   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
GC na Old usando G1 :: Depois do Marking (1)
                                                                                               Marcação feita de forma concorrente
                                                                                                – Uma única pausa “Stop-the-World”
                                                                                                     Executa remarcação
                                                                                                     Completa remarcações pendentes




30   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
GC na Old usando G1 :: Depois do Marking (2)
                                                                                               Marcação feita de forma concorrente
                                                                                                – Também calcula informações sobre
                                                                                                  “sobrevivência” de objetos por região
                                                                                                – Regiões vazias podem ser limpas
                                                                                                  imediatamente (como indicado no
                                                                                                  exemplo com o símbolo de “X”)




31   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
GC na Old usando G1 :: Depois do Marking (3)
                                                                                               Final da fase de remarcação
                                                                                                – Regiões vazias são limpas
                                                                                                – Informações sobre “sobrevivência” de
                                                                                                  objetos atualizadas para todas as
                                                                                                  regiões do tipo Old Generation




32   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
GC na Old usando G1 :: Depois do Marking (4)
                                                                                               Limpando regiões do tipo Old Gen
                                                                                                – Escolhe as regiões com baixa taxa de
                                                                                                  “sobrevivência” de objetos marcados
                                                                                                – Coleta alguns no próximo GC da
                                                                                                  Young Generation




33   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
GC na Old usando G1 :: Depois do Marking (5)
                                                                                               Pode ser que tenham sobrado alguns
                                                                                               objetos nas regiões do tipo Old Gen
                                                                                                – Nas regiões com as maiores taxas de
                                                                                                  “sobrevivência” de objetos
                                                                                                – Mas, esses objetos podem ser
                                                                                                  coletados mais tarde de acordo com
                                                                                                  as regiões não-utilizadas e o tempo
                                                                                                  de pausa setado na linha de comando




34   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Principais Diferenças entre o CMS e o G1 (1)

                CMS
                     – Muito difícil de fazer tuning. Muitos parâmetros precisam ser configurados
                             e muitos algoritmos precisam ser combinados e muito bem entendidos.




                G1
                     – O objetivo é que você defina apenas o tamanho da heap e o tempo de
                             pausa do GC



35   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Máximo Throughput
         usando Sockets Direct
         Protocol (SDP)




36   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Você Lembra Disso?

                                                                                               “The
                                                                                                Network
                                                                                                Is the
                                                                                                Computer”
                                                                                                          Scott McNealy
                                                                                                 Sun Microsystems, 1999

37   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Uso de InfiniBand em Sistemas de HPC (High
         Performance Computing)

                                                                                         InfiniBand

Curiosidade:
                                                                                               10 GBs

Uma rede InfiniBand
tradicional opera em                                                                     100 MB/s
40GB/s numa latência
média de 1.2 µs                                                                            10 MB/s


                                                                                                        0   2   4   6   8   10   12




38   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Uso de InfiniBand em Sistemas de HPC (High
         Performance Computing)
                     Redes Tradicionais                                                            Rede InfiniBand
               Aplicação                                               Aplicação               Aplicação          Aplicação

                  I/O Buffer                                            I/O Buffer

                         Copy         Transporte TCP/IP

                                                Kernel

                 20% Cópia em Buffers                                                             Zero Cópia de Buffers
              20% em Transport Processing                                                         Direct Memory Access
              40% Kernel Context Switching                                                          Bypass do Kernel


                                                             4X mais Throughput, 6X Menos Latência

39   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Suporte a SDP (Sockets Direct Protocol) no
         Java 7

      sdp.conf
         bind 192.168.0.16 *
         connect 192.168.0.12 8001
         connect 192.168.0.14 1521


              java -Dcom.sun.sdp.conf=sdp.conf
                   -Djava.net.preferIPv4Stack=true com.acme.util.Application


40   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
OpenJDK: Contribuindo
         com o Futuro da JVM




41   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
OpenJDK: Contribuindo com o Futuro da JVM
                Principais Recursos
                     – Feedback sobre assuntos em Geral: hotspot-dev@openjdk.java.net
                     – Questões gerais sobre o uso do GC: hotspot-gc-use@openjdk.java.net
                     – Questões de desenvolvimento do GC: hotspot-gc-dev@openjdk.java.net
                     – Builds “Early Access” do JDK 8: http://jdk8.java.net/download.html

                                                                                               • Java Deployment
                                                                                               • Java Graphics (2D, 3D)
                                                                                               • Java Security Extensions
                                                                                               • Java Performance Tuning
                                                                                               • Java Core Libraries
                                                                                               • Java Quality Assurange

42   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
Graphic Section Divider




43   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD
44   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.   JavaOne 2012 LAD

Contenu connexe

Similaire à CON22150 - The Future of JVM Performance Tuning

Java Bahia Desenvolvimento Java Area1
Java Bahia Desenvolvimento Java Area1Java Bahia Desenvolvimento Java Area1
Java Bahia Desenvolvimento Java Area1guestc9a1c7
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EEEder Magalhães
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEBruno Borges
 
Desenvolvimento Java
 Desenvolvimento Java Desenvolvimento Java
Desenvolvimento JavaSerge Rehem
 
Java - Learn Once Use Anywhere
Java - Learn Once Use AnywhereJava - Learn Once Use Anywhere
Java - Learn Once Use AnywhereSerge Rehem
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01Daniel Alves
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01rollbackpt
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEBruno Borges
 
Detalhes internos da nova JVM do Java 8 @mariofts
Detalhes internos da nova JVM do Java 8   @marioftsDetalhes internos da nova JVM do Java 8   @mariofts
Detalhes internos da nova JVM do Java 8 @marioftsMario Amaral
 
Slides 04 - A Linguagem Java.pdf
Slides 04 - A Linguagem Java.pdfSlides 04 - A Linguagem Java.pdf
Slides 04 - A Linguagem Java.pdfJadna Almeida
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves PagesAmanda Luz
 

Similaire à CON22150 - The Future of JVM Performance Tuning (20)

Java Bahia Desenvolvimento Java Area1
Java Bahia Desenvolvimento Java Area1Java Bahia Desenvolvimento Java Area1
Java Bahia Desenvolvimento Java Area1
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EE
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EE
 
Desenvolvimento Java
 Desenvolvimento Java Desenvolvimento Java
Desenvolvimento Java
 
Java - Learn Once Use Anywhere
Java - Learn Once Use AnywhereJava - Learn Once Use Anywhere
Java - Learn Once Use Anywhere
 
Linguagem de programação Java 6, 7 e 8
Linguagem de programação Java 6, 7 e 8Linguagem de programação Java 6, 7 e 8
Linguagem de programação Java 6, 7 e 8
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Dr Java Virtual Machine
Dr Java Virtual MachineDr Java Virtual Machine
Dr Java Virtual Machine
 
JUDCon Brazil 2013
JUDCon Brazil 2013JUDCon Brazil 2013
JUDCon Brazil 2013
 
Java basico
Java basicoJava basico
Java basico
 
Tutorial Java EE
Tutorial Java EETutorial Java EE
Tutorial Java EE
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EE
 
Detalhes internos da nova JVM do Java 8 @mariofts
Detalhes internos da nova JVM do Java 8   @marioftsDetalhes internos da nova JVM do Java 8   @mariofts
Detalhes internos da nova JVM do Java 8 @mariofts
 
Introducao EJB 3
Introducao EJB 3Introducao EJB 3
Introducao EJB 3
 
Slides 04 - A Linguagem Java.pdf
Slides 04 - A Linguagem Java.pdfSlides 04 - A Linguagem Java.pdf
Slides 04 - A Linguagem Java.pdf
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves Pages
 

CON22150 - The Future of JVM Performance Tuning

  • 1. 1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 2. The Future of JVM Performance Tuning Ricardo S. Ferreira Java, FMW & Engineered Systems Expert ricardo.s.ferreira@oracle.com 2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 3. The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. 3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 4. Agenda JVM, Threads, RAM, Heap e Garbage Collection Os Algoritmos Clássicos de Garbage Collection Overview sobre o Algoritmo G1: Garbage-First Máximo Throughput usando Sockets Direct Protocol OpenJDK: Contribuindo com o futuro da JVM 4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 5. Sobre o Palestrante http://blogs.oracle.com/middlewareplace Começou a desenvolver @jricardoferreir software como profissão em 1997 (Delphi, C/C++) Procure por “Ricardo Ferreira” Trabalha com Java desde 2002 (Em especial JEE) Procure por “Ricardo Ferreira” Red Hat, Progress Soft. http://blogs.oracle.com/middlewareplace Respira constantemente tecnologia na Oracle http://youtube.com/rferreira12345tube Performance-Driven Guy 5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 6. JVM, Threads, RAM, Heap & Garbage Collection (GC) 6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 7. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre JVM & Threads Sistema Operacional JVM 1 JVM 2 7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 8. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre RAM e Heap Layout de Memória pra JVM Kernel do Heap (~75%) S.O (~10%) Código Threads (~5%) Nativo (~12%) 8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 9. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre RAM e Heap Layout de Memória pra JVM Heap Eden Old Kernel do S.O Perm Stack Código Nativo Threads 9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 10. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre Garbage Collection (GC) Objeto Objeto 0x9FFF0 Roots 10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 11. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre Garbage Collection (GC) Objeto Objeto 0x9FFF0 Roots Foo* foo = new Foo(); delete foo; foo->doSomething(); 11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 12. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre Garbage Collection (GC) Objeto Objeto 0x9FFF0 Roots Foo* foo = new Foo(); delete foo; foo->doSomething(); 12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 13. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre Garbage Collection (GC) Sistema Operacional GC são threads que executam em baixa prioridade na JVM JVM 1 Existem vários tipos de threads de um GC, mas entre eles: – Mutators: Responsáveis por alocar a memória e remanejar os ponteiros e referências – Collectors: responsáveis por fazer a limpeza do espaço de memória alocado na Heap 13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 14. Os Algoritmos Clássicos de Garbage Collection (GC) 14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 15. Os Algoritmos Clássicos de Garbage Collection Overview sobre os Principais Algoritmos de GC Conhecidos Algoritmos de GC Todos esses algoritmos possuem um objetivo ou Não Tempo foco particular na JVM Concorrentes Real Concorrentes Algumas implementações Mark-Sweep Parallel Garbage-First de GC são na prática uma combinação destes Mark-Compact Concurrent Deterministic algoritmos clássicos. Copying GC É possível combinar os Reference algoritmos, desde que Counting não ocorra trade-off. 15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 16. Os Algoritmos Clássicos de Garbage Collection Overview sobre os Principais Algoritmos de GC Conhecidos Algoritmos de GC Não Tempo Concorrentes Real Concorrentes Mark-Sweep Parallel Garbage-First Mark-Compact Concurrent Deterministic Copying GC Reference Counting 16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 17. Overview sobre o Algoritmo G1: Garbage-First 17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 18. Qual é a “Grande Sacada” do G1? Principais Características do G1 Executar o GC de forma concorrente aos threads da aplicação Java Usar compactação de espaço livre sem pênalti para o tempo de GC Usar paralelismo para melhorar o tempo de resposta da aplicação Java Possibilitar um tempo de GC mais próximo do tempo real possível Possibilitar o uso de áreas de heap maiores que 6 GB 18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 19. Overview sobre o G1 (Garbage-First) Oracle HotSpot Antes do G1 Young Generation – Dividida em: Eden Survivors Eden Space 2 Survivors Old Generation – Único e grande espaço contíguo Old Generation – Desalocação no CMS ocorre no espaço e de forma concorrente – “Stop-the-World” para executar uma compactação total e em paralelo 19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 20. Overview sobre o G1 (Garbage-First) Oracle HotSpot Depois do G1 Único espaço contínuo de memória quebrado em múltiplas regiões de tamanhos iguais Tamanho da região dito pela JVM no startup. Varia entre de 1 MB à 32 MB. 20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 21. Young GC no CMS (Parte 1) Young Generation – Dividida em 1 eden e 2 espaços de survivors (Foco em objetos recentes) Old Generation – Compactado apenas no Full-GC – Desalocação é feita somente dentro da região da Old Generation 21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 22. Young GC no CMS (Parte 2) Durante o Young GC – Objetos recentes da Young são evacuados (copiados/movidos) para Outro espaço de survivor Old Generation – Isso implica em “Stop-the-World” 22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 23. Young GC no CMS (Parte 3) Final do Young GC – Eden e 1 dos survivors devem estar completamente vazios (possivelmente) – Objetos podem ter sido promovidos para a Old Generation 23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 24. Young GC no G1 (Parte 1) Heap da JVM separada em regiões – Média de regiões: 2 KB – Cada região com 1 MB ou até 32 MB. Dá pra alterar com o argumento -XX:G1HeapRegionSize Young e Old não precisam ser mais contíguos. I/O aleatórios nas regiões. 24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 25. Young GC no G1 (Parte 2) Durante o Young GC – Objetos recentes da Young são evacuados (copiados/movidos) para Uma ou mais regiões de survivor Regiões do tipo Old Generation – Isso implica em “Stop-the-World” – Próximo tempo de GC é calculado 25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 26. Young GC no G1 (Parte 3) Final da Young GC – Objetos recentes da Young foram evacuados (copiados/movidos) para Zero ou mais regiões de survivor Regiões do tipo Old Generation – Regiões do eden e survivor são potencialmente redimensionados 26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 27. GC na Old usando CMS :: Depois do Marking (1) Marcação feita de forma concorrente – 2 pausas do tipo “Stop-theWorld” Marcação inicial Remarcação – Marca objetos rastreáveis recentes – Objetos não marcados são os que foram considerados mortos 27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 28. GC na Old usando CMS :: Depois do Marking (2) Sweeping feito de forma concorrente – Executa o sweeping em todo o espaço reservado para Old Gen – Desaloca objetos mortos que não foram marcados ou que foram marcados com a cor branca – Não realiza nenhuma compactação 28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 29. GC na Old usando CMS :: Depois do Marking (3) Final da fase de sweeping concorrente – Todos os objetos não marcados são desalocados e têm seu espaço limpo 29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 30. GC na Old usando G1 :: Depois do Marking (1) Marcação feita de forma concorrente – Uma única pausa “Stop-the-World” Executa remarcação Completa remarcações pendentes 30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 31. GC na Old usando G1 :: Depois do Marking (2) Marcação feita de forma concorrente – Também calcula informações sobre “sobrevivência” de objetos por região – Regiões vazias podem ser limpas imediatamente (como indicado no exemplo com o símbolo de “X”) 31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 32. GC na Old usando G1 :: Depois do Marking (3) Final da fase de remarcação – Regiões vazias são limpas – Informações sobre “sobrevivência” de objetos atualizadas para todas as regiões do tipo Old Generation 32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 33. GC na Old usando G1 :: Depois do Marking (4) Limpando regiões do tipo Old Gen – Escolhe as regiões com baixa taxa de “sobrevivência” de objetos marcados – Coleta alguns no próximo GC da Young Generation 33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 34. GC na Old usando G1 :: Depois do Marking (5) Pode ser que tenham sobrado alguns objetos nas regiões do tipo Old Gen – Nas regiões com as maiores taxas de “sobrevivência” de objetos – Mas, esses objetos podem ser coletados mais tarde de acordo com as regiões não-utilizadas e o tempo de pausa setado na linha de comando 34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 35. Principais Diferenças entre o CMS e o G1 (1) CMS – Muito difícil de fazer tuning. Muitos parâmetros precisam ser configurados e muitos algoritmos precisam ser combinados e muito bem entendidos. G1 – O objetivo é que você defina apenas o tamanho da heap e o tempo de pausa do GC 35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 36. Máximo Throughput usando Sockets Direct Protocol (SDP) 36 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 37. Você Lembra Disso? “The Network Is the Computer” Scott McNealy Sun Microsystems, 1999 37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 38. Uso de InfiniBand em Sistemas de HPC (High Performance Computing) InfiniBand Curiosidade: 10 GBs Uma rede InfiniBand tradicional opera em 100 MB/s 40GB/s numa latência média de 1.2 µs 10 MB/s 0 2 4 6 8 10 12 38 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 39. Uso de InfiniBand em Sistemas de HPC (High Performance Computing) Redes Tradicionais Rede InfiniBand Aplicação Aplicação Aplicação Aplicação I/O Buffer I/O Buffer Copy Transporte TCP/IP Kernel 20% Cópia em Buffers Zero Cópia de Buffers 20% em Transport Processing Direct Memory Access 40% Kernel Context Switching Bypass do Kernel 4X mais Throughput, 6X Menos Latência 39 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 40. Suporte a SDP (Sockets Direct Protocol) no Java 7 sdp.conf bind 192.168.0.16 * connect 192.168.0.12 8001 connect 192.168.0.14 1521 java -Dcom.sun.sdp.conf=sdp.conf -Djava.net.preferIPv4Stack=true com.acme.util.Application 40 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 41. OpenJDK: Contribuindo com o Futuro da JVM 41 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 42. OpenJDK: Contribuindo com o Futuro da JVM Principais Recursos – Feedback sobre assuntos em Geral: hotspot-dev@openjdk.java.net – Questões gerais sobre o uso do GC: hotspot-gc-use@openjdk.java.net – Questões de desenvolvimento do GC: hotspot-gc-dev@openjdk.java.net – Builds “Early Access” do JDK 8: http://jdk8.java.net/download.html • Java Deployment • Java Graphics (2D, 3D) • Java Security Extensions • Java Performance Tuning • Java Core Libraries • Java Quality Assurange 42 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 43. Graphic Section Divider 43 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD
  • 44. 44 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD