Partiu melhorar a
performance da
nossa aplicação
Java?
Alessandra Milani e
Roberto Flores
Floripa 2017
Mini Bio
Alessandra M. Paz Milani
Performance Engineer com 7+ anos de experiência;
14+ anos trabalhando com desenvolvimento SW.
Últimas empresas: ADP Labs (atual) e DELL.
MBA em Gestão de Projetos; Mestranda em Ciência da
Computação da PUCRS.
Roberto Raguze Flores
Software Architect com 4+ anos de experiência;
8+ anos trabalhando com desenvolvimento de sistemas.
Últimas empresas: ADP Labs (atual) e SAP.
Bacharel em Ciência da Computação na Unisinos.
Mini Bio
Alessandra M. Paz Milani
Performance Engineer com 7+ anos de experiência;
14+ anos trabalhando com desenvolvimento SW.
Últimas empresas: ADP Labs (atual) e DELL.
MBA em Gestão de Projetos; Mestranda em Ciência da
Computação da PUCRS.
Roberto Raguze Flores
Software Architect com 4+ anos de experiência;
8+ anos trabalhando com desenvolvimento de sistemas.
Últimas empresas: ADP Labs (atual) e SAP.
Bacharel em Ciência da Computação na Unisinos.
Mini Bio
Alessandra M. Paz Milani
Performance Engineer com 7+ anos de experiência;
14+ anos trabalhando com desenvolvimento SW.
Últimas empresas: ADP Labs (atual) e DELL.
MBA em Gestão de Projetos; Mestranda em Ciência da
Computação da PUCRS.
Roberto Raguze Flores
Software Architect com 4+ anos de experiência;
8+ anos trabalhando com desenvolvimento de sistemas.
Últimas empresas: ADP Labs (atual) e SAP.
Bacharel em Ciência da Computação na Unisinos.
Métodos
• Dois tipos:
– Os que são resolvidos de forma estática pelo compilador (static,
private, final and constructors)
– Os que são resolvidos dinamicamente em tempo de execução
• Melhores práticas
1. Declare como static métodos que não usam variáveis ou métodos
de instância
2. Se o método não precisa ser sobre escrito, declare como final
3. Métodos não expostos devem ser sempre declarados como private
4. Evite métodos e chamadas synchronized
Java Virtual Machine
Otimizações
Just-in-time compiling
Adaptive optimizing
Garbage collection
Complexidade
Notação Big O
Horrível Ruim Razoável Bom Excelente
Operações
Elementos
Complexidade
Na prática
O(n3)
O(n2)
45 1 -88 -68 37 86 56 70 59 -2637 86 56 70 59
Complexidade
Na prática
1
10
100
1000
10000
100000
0 5000 10000 15000
TempodaOperação(ms)
Tamanho do array (elementos)
O(n3)
O(n2)
Performance Testing
Contextualizando
• Exemplos de tipos de teste...
Load Testing Stress Testing Soak Testing
• Exemplos de ferramentas para automação do teste e monitoramento...
Monitoramento
Java VisualVM
• Free! Procure dentro da pasta bin do JDK pelo .exe
• Getting Started: http://visualvm.java.net/gettingstarted.html
Monitoramento
Por onde eu começo?
CPU
Memória
Threads
Procure
Padrões!
Complexity kills, aim for simplicity!
Monitoramento
CPU Usage
100%
Garbage
Collector!
CPU Usage!
Monitoramento
CPU sampling
(1)
(2) Depois de finalizado (2-3 minutos) abrir o arquivo do snapshot
(3) Verificar a tab "Hot Spots”, pode classificar por Methods, Classes ou Packages.
(4) Permite ordenação pelo totalizador de chamadas e tempo…
Monitoramento
Memory Heap
Quais foram as dicas mesmo?
• Tipos primitivos
• Métodos resolvidos
estáticamente
• Complexidade do
algoritmo
Coding
• Tool: Java VisualVM
• Threads
• CPU Usage
• Memory Heap usage
Load Testing &
Monitoring
https://jobs.adp.com/pt-br/locations/brazil/

TDC2017 | Florianópolis - Trilha Java Melhorando a performance do seu Código Java

  • 1.
    Partiu melhorar a performanceda nossa aplicação Java? Alessandra Milani e Roberto Flores Floripa 2017
  • 2.
    Mini Bio Alessandra M.Paz Milani Performance Engineer com 7+ anos de experiência; 14+ anos trabalhando com desenvolvimento SW. Últimas empresas: ADP Labs (atual) e DELL. MBA em Gestão de Projetos; Mestranda em Ciência da Computação da PUCRS. Roberto Raguze Flores Software Architect com 4+ anos de experiência; 8+ anos trabalhando com desenvolvimento de sistemas. Últimas empresas: ADP Labs (atual) e SAP. Bacharel em Ciência da Computação na Unisinos.
  • 3.
    Mini Bio Alessandra M.Paz Milani Performance Engineer com 7+ anos de experiência; 14+ anos trabalhando com desenvolvimento SW. Últimas empresas: ADP Labs (atual) e DELL. MBA em Gestão de Projetos; Mestranda em Ciência da Computação da PUCRS. Roberto Raguze Flores Software Architect com 4+ anos de experiência; 8+ anos trabalhando com desenvolvimento de sistemas. Últimas empresas: ADP Labs (atual) e SAP. Bacharel em Ciência da Computação na Unisinos.
  • 4.
    Mini Bio Alessandra M.Paz Milani Performance Engineer com 7+ anos de experiência; 14+ anos trabalhando com desenvolvimento SW. Últimas empresas: ADP Labs (atual) e DELL. MBA em Gestão de Projetos; Mestranda em Ciência da Computação da PUCRS. Roberto Raguze Flores Software Architect com 4+ anos de experiência; 8+ anos trabalhando com desenvolvimento de sistemas. Últimas empresas: ADP Labs (atual) e SAP. Bacharel em Ciência da Computação na Unisinos.
  • 5.
    Métodos • Dois tipos: –Os que são resolvidos de forma estática pelo compilador (static, private, final and constructors) – Os que são resolvidos dinamicamente em tempo de execução • Melhores práticas 1. Declare como static métodos que não usam variáveis ou métodos de instância 2. Se o método não precisa ser sobre escrito, declare como final 3. Métodos não expostos devem ser sempre declarados como private 4. Evite métodos e chamadas synchronized
  • 6.
    Java Virtual Machine Otimizações Just-in-timecompiling Adaptive optimizing Garbage collection
  • 7.
    Complexidade Notação Big O HorrívelRuim Razoável Bom Excelente Operações Elementos
  • 8.
    Complexidade Na prática O(n3) O(n2) 45 1-88 -68 37 86 56 70 59 -2637 86 56 70 59
  • 9.
    Complexidade Na prática 1 10 100 1000 10000 100000 0 500010000 15000 TempodaOperação(ms) Tamanho do array (elementos) O(n3) O(n2)
  • 10.
    Performance Testing Contextualizando • Exemplosde tipos de teste... Load Testing Stress Testing Soak Testing • Exemplos de ferramentas para automação do teste e monitoramento...
  • 11.
    Monitoramento Java VisualVM • Free!Procure dentro da pasta bin do JDK pelo .exe • Getting Started: http://visualvm.java.net/gettingstarted.html
  • 12.
    Monitoramento Por onde eucomeço? CPU Memória Threads Procure Padrões!
  • 13.
    Complexity kills, aimfor simplicity!
  • 14.
  • 15.
    Monitoramento CPU sampling (1) (2) Depoisde finalizado (2-3 minutos) abrir o arquivo do snapshot (3) Verificar a tab "Hot Spots”, pode classificar por Methods, Classes ou Packages. (4) Permite ordenação pelo totalizador de chamadas e tempo…
  • 16.
  • 17.
    Quais foram asdicas mesmo? • Tipos primitivos • Métodos resolvidos estáticamente • Complexidade do algoritmo Coding • Tool: Java VisualVM • Threads • CPU Usage • Memory Heap usage Load Testing & Monitoring
  • 18.