340 likes | 459 Vues
Performance Java. Flávia Falcão | fmcf2 @c in . ufpe .br. Roteiro. Motivação Objetivos Garbage Collection Parser Codificação Java Conclusao Referencias. Motivação. Web está em todo lugar : E-marketplaces E-comerce B2B automatizado Interegracao de processos de negocio na web
E N D
Performance Java Flávia Falcão| fmcf2@cin.ufpe.br
Roteiro • Motivação • Objetivos • Garbage Collection • Parser • Codificação Java • Conclusao • Referencias
Motivação • Web está em todo lugar : • E-marketplaces • E-comerce B2B automatizado • Interegracao de processos de negocio na web • Compartilahamento de recursos , computacao distribuida • Necessidade de plataforma que permita interações aplicação-a-aplicação sistemática na web : • Foco Tecnologia web services,escopo é o projeto CENAS Problema : A performance dessas aplicações
Objetivos • Identificar os fatores que influenciam o desempenho das aplicações j2ee e web services • JVM Tunning • XML Parser • Boas práticas para codificação de aplicações em JAVA, com ênfase em WebServices
Garbage Collection • A performance de uma aplicação está intimamente ligada ao custo da alocação e desalocação de memória. Se uma aplicação usa uma quantidade de memória tal que força o sistema operacional a usar memória virtual, esta aplicação sofrerá um impacto na performance
Tempo de Vida dos Objetos • A maioria dos objetos tem um curto tempo de vida: • 80-98% dos objetos alocados morrem em menos de poucos milhões de instruções. • 80-98% dos objetos alocados morrem antes de outro megabyte ter sido alocado. • Isto tem grande impacto da escolha do algoritmo de Garbage Collection • Definir o perfil de execução de uma aplicação, Isso é difícil !!!
Generacional GC • Divide a heap em múltiplas áreas ( gerações) • Objetos segregados por idade • Objetos novos morrem mais frequentemente,GC mais freqüente • Em Gerações mais velhas as coletas são menos freqüentes • Diferentes gerações usam diferentes algoritmos
Maquina Virtual JAVA • A HotSpot VM otimiza o gerenciamento de memória por idades (generational). • O heap da maquina virtual é dividida em young generation e old gereration e permanent generation de acordo com a idade do objeto
Maquina Virtual JAVA • Na Young generation estão os objetos considerados com tempo de curto relativo a um intervalo de coletas. • A young generation é dividida em 3 espacos : • um eden • dois espaços “Survivor”(to-space e from-space). • As alocações acontecem do eden para o from-space.Quando estes estão preenchidos a coleta na Young generation é feita. • Geralmente a young generation é muito menor em relação ao tamanho da heap.Isto leva a pequenas mas freqüentes pausas na young generation durante a execução do garbage collection.
Maquina Virtual JAVA • Objetos que sobreviventes a um determinado numero de coletas são movidos(promovidos) para a old generation. • A old generation é geralmente maior em relação a Young o que leva a pausas maiores e menosfreqüentes . • A permanent generation é usada para armazenar classes de objetos e meta dados relacionados.
Maquina Virtual JAVA • Parâmetros da JVM • -XX:NewSize • -XX:MaxNewSize • -XX:SurvivorRatio • Automaticamente • XX:+UseAdaptativeSize
Maquina Virtual JAVA • Como exemplo, para uma Yung generation com 128Mb, Eden de 64Mb, Semi-Space 32MB, Os parametros devem ser java -Xms512m -Xmx512m \ -XX:NewSize=128m -XX:MaxNewSize=128m \ -XX:SurvivorRatio=2 application
Maquina Virtual JAVA A otimização da utilização destas áreas juntamente com a escolha correta do algorítimo do garbage collector pode gerar um aumento de performance considerável
Maquina Virtual JAVA • Nas J2Ses o algoritmo default da Young generation é o copyng collector já na old generation o algoritmo padrão é o mark-compact collector.
Maquina Virtual JAVAAlgorítimos • Parallel Collector que é implementado na young generation.Este Coletor usa a versão paralela da young generation coletor.(copyng colector). Deve ser usado quando se deseja melhorar o desempenho da aplicação em maquinas com vários processadores. • -XX:+UseParNewGC , -XX:+UseParallelGC, - XX:ParallelGCThreads=n
Maquina Virtual JAVAAlgorítimos • Concurrent mark sweep Collector é implementado na old generation.Tenta minimizar as pausas fazendo a maioria da coleta simultaneamente com as threads da aplicação . • -XX :UseConcMarkSweepGC
Fatores que afetam o GC • Taxa de objetos criados • Vida dos objetos • Temporários,intermediários,longos • Tipo do objeto • Tamanho, complexidade • Relacionamento entre objetos • Dificuldade de determinar e traçar as referencias dos objetos
Atividades Realizadas • Analisar os principais algoritmos geracionais do garbage Collection da jvm 1.4.2 • Copyng GC • Mark sweep GC • Parallel GC • Concurrent mark sweep GC • Incremental GC • Mecanismos disponiveis para otimizar seu desempenho • Analise do comportamento da Heap da jvm
Cases 1
Cases • Teste com a aplicação J2EE PetStore • Desafios • Analisar o comportamento dos algorítimos e mensurar a performance deles em maquinas multiprocessadas • Realizar um estudo sobre dimensionamento do HEAP
Web services : Problemas • XML é o coração da tecnologia web services. • Problemas : • Tamanho dos arquivos xml • Marshalling e un-marshaling • Tipo de dado • Transmissao de mensagens SOAP • Validação
Marshalling e Un-marshaling :Parser XML • O tempo de conversão de documentos XML durante o processo de comunicação, pode significar um grande gargalo no sistema quando se refere à performance do envio e recebimento de um serviço.
Case • Testes realizados com Parsers Xml/Java de diferentes fabricantes. • Desafios: • Realizar testes em aplicação analisando o comportamento de cada um dos parsers • Mensurar e comparar o desempenho deles
Codificação Java • A maneira com que se escreve um código pode ter um impacto no desempenho de um sistema. • Inúmeros partes similares de código podem ter desempenhos radicalmente diferentes.. Como os que seguem…
Exemplos (1) • Concatenação de strings String str = “teste” + “já” + “va”; internamente é : String str = new StringBuffer().append(“teste”).append(“ja”).append(“va”).toString();