SlideShare uma empresa Scribd logo
1 de 25
core business solutions
Dicas e truques de performance em
            JPA e EJB
          Danival Taffarel Calegari
             MATERA Systems
Sobre os palestrantes
 Danival Taffarel Calegari
    Mestre em Ciê
                ncia da Computaç ã pela UNICAMP.
                                  o
    Trabalha com tecnologia Java EE desde 2002. Atua a mais de 4 anos
      com líder té cnico na MATERA Systems.
    Atua hámais de 5 anos como instrutor da Globalcode.
    Palestras em eventos nacionais e internacionais: JustJava, TCD,
      JavaOne.
    Participa do programa “Adopt a JSR” do SouJava (JSR 352).
    Certificaç õ SCJP, SCWCD, SCBCD.
                es:
Agenda

Introduç ão
Dicas de JPA
Dicas de EJB
Referê
     ncias
Introduç ão

 Performance é um requisito nã funcional chave para
                              o
   conseguirmos os outros.
    Serve como “moeda” para “comprar” linguagens mais expressivas,
      melhores interfaces com usuá maior nú
                                  rio,      mero de funcionalidades,
      frameworks gené ricos, etc.
 Influenciado pela escolha dos algoritmos, complexidade do
    problema, volume de dados manipulados.
 Aspectos de programaç ã també m tem grande impacto no
                        o
   desempenho da aplicaç ão.
    O uso de mecanismos inadequados ao problema pode prejudicar muito
      a performance.
 Demo: ordenaç ã de registro em arquivo.
                o
Introduç ão




 “ We should forget about small efficiencies, say about 97% of
   the time: premature optimization is the root of all evil”
                                                   Donald Knuth
Profiling

 Dica: Realize mediç õ antes de fazer otimizaç õ
                      es                        es.
 Procure determinar os pontos de gargalo da aplicaç ão.
    Resolver um ponto crítico traz muito benefício com pouco esforç o.
 Quando possível, utilize profilers.
    VisualVM que vem no JDK desde a versã 6 u7.
                                         o
    NetBeans Profiler.
 Siga as trê etapas abaixo:
           s
    Intuiç ão.
    Mediç ão.
    Correç ão.
JPA

Dica: Prefira usar consultas parametrizadas a
  concatenar o valor dos parâ metros no JPQL para
  permitir cache de consultas.


"select p from Payment p where p.customer.id="+custId


Como cada consulta tem um texto diferente, o cache de
 consultas nã se torna eficiente.
             o
"select p from Payment p where p.customer.id=:custId"


Esta soluç ã possui desempenho semelhante ao das
            o
  NamedQuery no EclipseLink.
Lazy vs Eager

 Estraté gias para recuperar os objetos “do outro lado” de um
   relacionamento
 Lazy: só recupera um dado quando necessá
                                        rio.
 Eager: recupera o dado sempre.
Lazy vs Eager



Problema do N + 1
Lazy vs Eager

 Dica: O JPA permite que a mudanç a de lazy para
   eager seja feita no JPQL.
    select distinct c from Categoria c join fetch c.produtos
 Faz um único SELECT no banco de dados;
 O join fetch resolve o problema do N+1;
 Deve-se usar distinct para evitar replicaç ã de resultados;
                                             o
 Causa problemas com paginaç ã em banco de dados.
                              o
Lazy vs Eager
Lazy vs Eager

 Dica: Procure fazer paginaç ão em banco de dados
   usando estraté gia lazy quando 1:N.
   Use os mé todos setFirstResult e setMaxResults da Query.
 O provedor JPA vai usar comandos nativos de banco de dados
   para limitar a consulta;
 O uso de join fetch para relacionamentos 1:N provoca
   problemas de desempenho e de memó ria.
   WARN: firstResult/maxResults specified with collection fetch; applying in
    memory!
Lazy vs Eager


                cat1



                cat2

                cat3

                cat4
Lazy vs Eager

 Dica: Procure usar eager quando sempre for processar
   todos os dados de uma vez.
    Uma situaç ã comum é geraç ã de relató rios.
                o               o
 Cuidado com o uso de memó ria;
    Faç a uma consulta pré via para recuperar somente os ids e faç a várias
      consultas com in;
    Chame o mé todo clear do EntityManager para remover os objetos já
      utilizados da memó ria.
 O Hibernate possui o recurso de “scroll” , onde ele manté m o
   ResultSet aberto e consulta um objeto por vez.
Cache

First level cache
   Enquanto o EntityManager estiver aberto, ele armazena os objetos
     carregados por ele;
   Este cache é apagado quando o mé todo clear é chamado.
Second level cache
   Armazena os objetos por EntityManagerFactory;
   Cache “por aplicaç ão”.
Cache
Cache

Truque: Faç a uma carga pré via das entidades
  relacionadas no cache de primeiro nível antes da
  consulta principal.
  Consultas a objetos que possuem relacionamentos N:1 com entidades
    com um nú mero pequeno de instâncias.
Exemplo: Buscar produtos.
  Executar um “select c from Categoria c” antes da consulta por
    produtos.
  Recomendado em caso de entidades com complexidade de carga
    grande (pode-se usar join fetch).
Cache
Cache

Dica: Use cache de segundo nível para diminuir o
  consumo de memó ria e melhorar o desempenho.
Procure colocar entidades alteradas com pouca frequê
                                                   ncia;
Caso alguma aplicaç ã externa altere o banco de dados, os
                     o
 dados das entidades em cache de segundo nível ficam
 desatualizados.
   Procure colocar um tempo má
                             ximo de validade para os dados.
Cache

Dica: Use cache de resultado de consultas caso as
  consultas sejam feitas com um conjunto restrito de
  valores.
Nã é um recurso padrã mas grande parte dos providers JPA
  o                  o,
 oferecem um recurso deste.
Armazena os ids dos objetos consultados vinculados com os
  parâ
     metros.
   Quando uma consulta é feita pelos mesmos parâ
                                               metros, játem o
    resultado pronto.
Cuidado com a política de exclusã de objetos do cache.
                                 o
   Pode levar a problemas de consumo excessivo de memó ria.
EJB

Dica: Evite transaç õ desnecessárias usando os
                     es
  atributos de propagaç ão de transaç ão apropriados.
Existem seis formas de propagaç ã de transaç ã
                                 o            o:
   Required (default)
   Requires New
   Mandatory
   Not Supported
   Supports
   Never
Caso o mé todo nã utilize recursos transacionais, coloque como
                 o
 “ Not Supported” ou mesmo “ Supports” para evitar iniciar
 transaç õ desnecessariamente.
         es
EJB

Dica: Reduza o custo de serializaç ão de
  desserializaç ão de objetos marcando atributos como
  transient.
Instâ
    ncias de Session Bean que sã Stateful podem ser
                                o
  armazenados no disco e removidos da memó ria quando não
  estã em uso.
      o
   Passivation
Em chamadas remotas os objetos passados como parâ   metro e
 retornados també m passam por serializaç ão/desserializaç ão.
Procure deixar os atributos simples (evite á
                                           rvores de objetos).
Sempre que possível, coloque os atributos como transientes
  (cuidado com valores nulos apó s a desserializaç ão).
Referências

 Java Performance
 Charlie Hunt, Binu John. Prentice Hall. Outubro, 2011.
 VisualVM Profiler
 http://visualvm.java.net
 Apresentaç ão do JavaOne 2010
 http://www.slideshare.net/drspockbr/performance-tips-and-tricks-java-ee-
    java-persistence-api-and-javaserver-faces
 Curso: Introduç ão a Algorítmos MIT (Portal Veduca)
 http://www.veduca.com.br/play?v=381&t=0016%20&p=Algoritmos
Obrigado!


 Danival Taffarel Calegari
danival.calegari@matera.com
 http://twitter.com/danivaltc

Mais conteúdo relacionado

Semelhante a Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a Rômulo Jales
 
Deixando aplicações Laravel mais rápidas
Deixando aplicações Laravel mais rápidasDeixando aplicações Laravel mais rápidas
Deixando aplicações Laravel mais rápidasDanilo Pinotti
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveiselliando dias
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka? pichiliani
 
TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?tdc-globalcode
 
Desenvolvimento Client-Side 2016
Desenvolvimento Client-Side 2016Desenvolvimento Client-Side 2016
Desenvolvimento Client-Side 2016Huge
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade IIIJoão Lourenço
 
Infinispan - Distribuição de Dados com Java
Infinispan - Distribuição de Dados com JavaInfinispan - Distribuição de Dados com Java
Infinispan - Distribuição de Dados com JavaWagner Roberto dos Santos
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com HibernateDanilo Braga
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com HibernateDanilo Braga
 
Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Thiago Rondon
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6MySQL Brasil
 

Semelhante a Polis Hyperlink Dicas e truques de Performance para JPA e EJB (20)

Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
 
Deixando aplicações Laravel mais rápidas
Deixando aplicações Laravel mais rápidasDeixando aplicações Laravel mais rápidas
Deixando aplicações Laravel mais rápidas
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
 
Pgbr2013
Pgbr2013Pgbr2013
Pgbr2013
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka?
 
TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?
 
Desenvolvimento Client-Side 2016
Desenvolvimento Client-Side 2016Desenvolvimento Client-Side 2016
Desenvolvimento Client-Side 2016
 
Siga a doutrina certa
Siga a doutrina certaSiga a doutrina certa
Siga a doutrina certa
 
De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
Infinispan - Distribuição de Dados com Java
Infinispan - Distribuição de Dados com JavaInfinispan - Distribuição de Dados com Java
Infinispan - Distribuição de Dados com Java
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com Hibernate
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com Hibernate
 
Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6
 

Mais de Danival Calegari

TDC 2014 - Java 8: Expressões Lambda e API de Stream
TDC 2014 - Java 8: Expressões Lambda e API de StreamTDC 2014 - Java 8: Expressões Lambda e API de Stream
TDC 2014 - Java 8: Expressões Lambda e API de StreamDanival Calegari
 
Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Danival Calegari
 
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013Danival Calegari
 
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvem
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvemEvitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvem
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvemDanival Calegari
 
JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...
JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...
JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...Danival Calegari
 
JSR 352 Batch Applications for the Java Platform
JSR 352 Batch Applications for the Java PlatformJSR 352 Batch Applications for the Java Platform
JSR 352 Batch Applications for the Java PlatformDanival Calegari
 

Mais de Danival Calegari (7)

Tecnologias Netflix OSS
Tecnologias Netflix OSSTecnologias Netflix OSS
Tecnologias Netflix OSS
 
TDC 2014 - Java 8: Expressões Lambda e API de Stream
TDC 2014 - Java 8: Expressões Lambda e API de StreamTDC 2014 - Java 8: Expressões Lambda e API de Stream
TDC 2014 - Java 8: Expressões Lambda e API de Stream
 
Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014
 
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
 
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvem
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvemEvitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvem
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvem
 
JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...
JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...
JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...
 
JSR 352 Batch Applications for the Java Platform
JSR 352 Batch Applications for the Java PlatformJSR 352 Batch Applications for the Java Platform
JSR 352 Batch Applications for the Java Platform
 

Polis Hyperlink Dicas e truques de Performance para JPA e EJB

  • 2. Dicas e truques de performance em JPA e EJB Danival Taffarel Calegari MATERA Systems
  • 3. Sobre os palestrantes Danival Taffarel Calegari Mestre em Ciê ncia da Computaç ã pela UNICAMP. o Trabalha com tecnologia Java EE desde 2002. Atua a mais de 4 anos com líder té cnico na MATERA Systems. Atua hámais de 5 anos como instrutor da Globalcode. Palestras em eventos nacionais e internacionais: JustJava, TCD, JavaOne. Participa do programa “Adopt a JSR” do SouJava (JSR 352). Certificaç õ SCJP, SCWCD, SCBCD. es:
  • 4. Agenda Introduç ão Dicas de JPA Dicas de EJB Referê ncias
  • 5. Introduç ão Performance é um requisito nã funcional chave para o conseguirmos os outros. Serve como “moeda” para “comprar” linguagens mais expressivas, melhores interfaces com usuá maior nú rio, mero de funcionalidades, frameworks gené ricos, etc. Influenciado pela escolha dos algoritmos, complexidade do problema, volume de dados manipulados. Aspectos de programaç ã també m tem grande impacto no o desempenho da aplicaç ão. O uso de mecanismos inadequados ao problema pode prejudicar muito a performance. Demo: ordenaç ã de registro em arquivo. o
  • 6. Introduç ão “ We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil” Donald Knuth
  • 7. Profiling Dica: Realize mediç õ antes de fazer otimizaç õ es es. Procure determinar os pontos de gargalo da aplicaç ão. Resolver um ponto crítico traz muito benefício com pouco esforç o. Quando possível, utilize profilers. VisualVM que vem no JDK desde a versã 6 u7. o NetBeans Profiler. Siga as trê etapas abaixo: s Intuiç ão. Mediç ão. Correç ão.
  • 8. JPA Dica: Prefira usar consultas parametrizadas a concatenar o valor dos parâ metros no JPQL para permitir cache de consultas. "select p from Payment p where p.customer.id="+custId Como cada consulta tem um texto diferente, o cache de consultas nã se torna eficiente. o "select p from Payment p where p.customer.id=:custId" Esta soluç ã possui desempenho semelhante ao das o NamedQuery no EclipseLink.
  • 9. Lazy vs Eager Estraté gias para recuperar os objetos “do outro lado” de um relacionamento Lazy: só recupera um dado quando necessá rio. Eager: recupera o dado sempre.
  • 11. Lazy vs Eager Dica: O JPA permite que a mudanç a de lazy para eager seja feita no JPQL. select distinct c from Categoria c join fetch c.produtos Faz um único SELECT no banco de dados; O join fetch resolve o problema do N+1; Deve-se usar distinct para evitar replicaç ã de resultados; o Causa problemas com paginaç ã em banco de dados. o
  • 13. Lazy vs Eager Dica: Procure fazer paginaç ão em banco de dados usando estraté gia lazy quando 1:N. Use os mé todos setFirstResult e setMaxResults da Query. O provedor JPA vai usar comandos nativos de banco de dados para limitar a consulta; O uso de join fetch para relacionamentos 1:N provoca problemas de desempenho e de memó ria. WARN: firstResult/maxResults specified with collection fetch; applying in memory!
  • 14. Lazy vs Eager cat1 cat2 cat3 cat4
  • 15. Lazy vs Eager Dica: Procure usar eager quando sempre for processar todos os dados de uma vez. Uma situaç ã comum é geraç ã de relató rios. o o Cuidado com o uso de memó ria; Faç a uma consulta pré via para recuperar somente os ids e faç a várias consultas com in; Chame o mé todo clear do EntityManager para remover os objetos já utilizados da memó ria. O Hibernate possui o recurso de “scroll” , onde ele manté m o ResultSet aberto e consulta um objeto por vez.
  • 16. Cache First level cache Enquanto o EntityManager estiver aberto, ele armazena os objetos carregados por ele; Este cache é apagado quando o mé todo clear é chamado. Second level cache Armazena os objetos por EntityManagerFactory; Cache “por aplicaç ão”.
  • 17. Cache
  • 18. Cache Truque: Faç a uma carga pré via das entidades relacionadas no cache de primeiro nível antes da consulta principal. Consultas a objetos que possuem relacionamentos N:1 com entidades com um nú mero pequeno de instâncias. Exemplo: Buscar produtos. Executar um “select c from Categoria c” antes da consulta por produtos. Recomendado em caso de entidades com complexidade de carga grande (pode-se usar join fetch).
  • 19. Cache
  • 20. Cache Dica: Use cache de segundo nível para diminuir o consumo de memó ria e melhorar o desempenho. Procure colocar entidades alteradas com pouca frequê ncia; Caso alguma aplicaç ã externa altere o banco de dados, os o dados das entidades em cache de segundo nível ficam desatualizados. Procure colocar um tempo má ximo de validade para os dados.
  • 21. Cache Dica: Use cache de resultado de consultas caso as consultas sejam feitas com um conjunto restrito de valores. Nã é um recurso padrã mas grande parte dos providers JPA o o, oferecem um recurso deste. Armazena os ids dos objetos consultados vinculados com os parâ metros. Quando uma consulta é feita pelos mesmos parâ metros, játem o resultado pronto. Cuidado com a política de exclusã de objetos do cache. o Pode levar a problemas de consumo excessivo de memó ria.
  • 22. EJB Dica: Evite transaç õ desnecessárias usando os es atributos de propagaç ão de transaç ão apropriados. Existem seis formas de propagaç ã de transaç ã o o: Required (default) Requires New Mandatory Not Supported Supports Never Caso o mé todo nã utilize recursos transacionais, coloque como o “ Not Supported” ou mesmo “ Supports” para evitar iniciar transaç õ desnecessariamente. es
  • 23. EJB Dica: Reduza o custo de serializaç ão de desserializaç ão de objetos marcando atributos como transient. Instâ ncias de Session Bean que sã Stateful podem ser o armazenados no disco e removidos da memó ria quando não estã em uso. o Passivation Em chamadas remotas os objetos passados como parâ metro e retornados també m passam por serializaç ão/desserializaç ão. Procure deixar os atributos simples (evite á rvores de objetos). Sempre que possível, coloque os atributos como transientes (cuidado com valores nulos apó s a desserializaç ão).
  • 24. Referências Java Performance Charlie Hunt, Binu John. Prentice Hall. Outubro, 2011. VisualVM Profiler http://visualvm.java.net Apresentaç ão do JavaOne 2010 http://www.slideshare.net/drspockbr/performance-tips-and-tricks-java-ee- java-persistence-api-and-javaserver-faces Curso: Introduç ão a Algorítmos MIT (Portal Veduca) http://www.veduca.com.br/play?v=381&t=0016%20&p=Algoritmos
  • 25. Obrigado! Danival Taffarel Calegari danival.calegari@matera.com http://twitter.com/danivaltc