YourKit Java Profiler é uma CPU e memória profiler software comercial que permite aos usuários resolver facilmente vasta gama de CPU e de memória relacionados com problemas de desempenho.
YourKit Java Profiler oferece detecção de vazamento automático, ferramentas poderosas para a análise da distribuição de memória, um navegador heap objeto, testes de memória abrangentes como parte de seu processo de teste JUnit, extremamente baixa sobrecarga de perfis.
O que é nova nesta versão:
- Agent: Windows detecção de versão melhorada. Em particular, o Windows 10 está agora devidamente detectado, eo Resumo mostra a versão do Windows com o número de compilação.
- Integração IDE: bug corrigido: NetBeans plugin não pode ser instalado no Windows 10
- profiling CPU: CPU de rastreamento correção resultado agora é aplicado somente se -Dyjp.apply.calibration = true é especificado em /bin/ui.ini
- Memória de perfil: otimização: melhorou o tempo de carregamento de instantâneos de memória (em particular, & quot; a tarefa 3 & quot; em andamento)
- Memória de perfil: otimização: Object Explorer e outros pontos de vista aberta mais rápido para alguns conjuntos de objetos
- profiling de memória: bug corrigido: vazamento de memória de estruturas de dados temporários criados durante instantâneo carregamento
O que é novo na versão 2013 Construir 13072:
- UI: bug corrigido: esporádica & quot; java. lang.ClassCastException & quot;
- UI: impasse detector: bug corrigido: possível & quot; impasse problema detector: Status incompatibilidade & quot; excepções para alguns insumos
- Agent: bug corrigido: IBM Java: & quot; java.lang.UnsatisfiedLinkError & quot; para métodos nativos no com.ibm.oti.vm.VM
O que é novo na versão 2013 Construir 13070:
- Agent: Linux: Corrigido o erro: nome de sessão incorrecto foi escolhido em caso de linha de comando muito longo, por exemplo, 'java' em vez de a classe principal ou JAR nome
- Agent: bug corrigido: opções de inicialização probe_on, probe_off, probe_auto, probe_disable não aceitou a curto sintaxe para sondas incorporadas, por exemplo, .Databases Para com.yourkit.probes.builtin.Databases
- Agente: sondas, contadores de desempenho: Corrigido o erro: FileOutputStream e de processo I / O eventos não foram registrados em algumas versões Java
- Integração IDE NetBeans 8.0 Beta: suportado
- Integração IDE: Mac OS X: bug corrigido: a UI profiler não se conectar automaticamente ao processo perfilado devido ao Java 7 da incapacidade do JavaAppLauncher para passar seus parâmetros de linha de comando para executável java
O que é novo na versão 2013 Construir 13066:
- Profiling CPU:
- comparação Snapshot: Melhoria: vistas de escravos & quot; Voltar traça & quot ;, & quot; Chamados lista & quot; e & quot; mesclados Chamados & quot; foram adicionados para um método selecionado no & quot; Método lista & quot ;. Eles são especialmente úteis quando se analisa um método chamado de diferentes lugares nos snapshots estão sendo comparados.
- J2EE alto nível de perfis agora é baseada em embutidos resultados da sonda.
- Isto elimina sobrecarga de chamadas de retorno específicas utilizadas anteriormente, que parcialmente repetidas a funcionalidade sonda built-in, bem como realizadas algumas operações em tempo de execução em vez de executá-los quando o profiler abre um instantâneo.
- O high_level_cpu_profiling imóvel já não existe na amostragem CPU ou configurações de rastreamento. O disablej2ee opção de arranque foi removido. Para ativar J2EE de alto nível de perfil off, você deve desligar ou desactivar as sondas correspondente.
- CPU: uma nova opção de arranque _instrument_all_methods foi adicionado ao instrumento getters primitivos, setters e outros métodos curtos semelhantes que apenas os campos e / ou de acesso a objetos retornam um valor. Por padrão, tais métodos não são instrumentados para reduzir a sobrecarga. Use esta opção quando as contagens de chamada para todos os chamados métodos são mais valiosas do que a precisão do tempo e menor sobrecarga.
- UI: adicionou capacidade de mostrar os métodos que tiveram menos de 1 ms, especificando -Dyjp.show.shortest.methods = true no /bin/yjp.ini
- Optimization: vista Hot Spots abre muito mais rápido
- UI: Adicionado a capacidade de desativar a correção de método de tempo zero com a ajuda da propriedade -Dyjp.zero.time.methods = false em /bin/yjp.ini. A correção em tempo zero significa que todas as chamadas para os seguintes métodos são ignorados:
- java.lang.Object: esperar (*)
- java.lang.Thread: sono (*)
- java.lang.Thread: rendimento (*)
- java.net.PlainSocketImpl: socketAccept (*)
- java.net.PlainSocketImpl: aceitar (*)
- java.net.ServerSocket: aceitar ()
- org.apache.tomcat.jni.Socket: aceitar (*)
- sun.nio.ch.ServerSocketChannelImpl: accept0 (*)
- sun.misc.Unsafe: parque (*)
- java.util.concurrent.locks.LockSupport: Parque * (*)
- com.ibm.tools.attach.javaSE.IPC: waitSemaphore (*)
- sun.nio.ch.EPollArrayWrapper: epollWait (*)
- Tecnicamente, o seu tempo é subtraído do chamador tempo até a raiz da árvore de chamada quando a CPU perfil resultados são carregados na interface. Em outras palavras, seu tempo é sempre considerado como 0 quando é aplicada a correção.
- Profiling memória:
- Explorador de Objeto: Os valores são imediatamente mostradas para objetos das seguintes classes:
- java.util.Date
- java.net.URL
- java.io.File
- java.util.zip.ZipFile
- java.util.jar.JarFile
- wrappers valor primitivo:
- java.lang.Integer
- java.lang.Long
- java.lang.Short
- java.lang.Boolean
- java.lang.Byte
- java.lang.Character
- java.lang.Double
- java.lang.Float
- valores atômicos:
- java.util.concurrent.atomic.AtomicInteger
- java.util.concurrent.atomic.AtomicLong
- java.util.concurrent.atomic.AtomicBoolean
- outras classes numéricas:
- java.math.BigDecimal
- java.math.BigInteger
- reflexão:
- java.lang.reflect.Field
- java.lang.reflect.Constructor
- java.lang.reflect.Method
- (desde construir 13.062) tamanho da coleção de classes de coleção e suas subclasses:
- java.util.ArrayList
- java.util.Arrays $ ArrayList (voltar de Arrays.asList ())
- java.util.HashMap
- java.util.HashSet
- java.util.Hashtable
- java.util.IdentityHashMap
- java.util.LinkedList
- java.util.PriorityQueue
- java.util.TreeMap
- java.util.Vector
- java.util.WeakHashMap
- explorer Objeto: auto referência a objetos são explicitamente indicado com [referência Self], e nós da árvore são correspondentes folhas agora para evitar expansão infinita li>
- explorer Objeto: adicionou capacidade de personalizar o número máximo de objetos individuais mostrados com a ajuda da propriedade -Dyjp.max.objects.to.show = em /bin/yjp.ini. O valor padrão permanece 500. Nota:. Definição de valores maiores aumenta o uso de memória e pode retardar a interface do usuário
- matrizes primitivas com os mesmos elementos são explicitamente indicado no objeto Explorer, caminhos e outros pontos de vista que apresentam objetos individuais
- Análise de matrizes com um grande número de elementos foi simplificado com a ajuda da nova memória da ação | Elementos Ver Array (Shift + F5) (também acessíveis através de um menu pop-up), que abre todos os elementos do array (s) de referência selecionado em uma nova aba, onde podem ser exaustivamente examinado com todas as vistas disponíveis.
- Esta ação também está disponível como o & quot; Abrir todos os elementos em uma nova guia & quot; hyperlink no objeto Explorer, além do & quot; Configurar matriz mostrado gama elemento ... & quot; hyperlink disponível para as matrizes com elementos ocultos.
- caminhos mesclados: melhoria: nós separados são usados para raízes GC e objetos acumulados de vários objetos
- caminhos mesclados: melhoria: & quot;
rastreamento
O que é novo na versão 12.0.5:
- O arquivo de log do agente não pode ser criado se o nome da sessão continha caracteres de nome de arquivo inválidos.
O que é novo na versão 12.0.4:
- Esta gravação alocação correções versão amostrada, o que pode falhar o aplicativo de perfil se a amostragem CPU nunca tinha sido iniciado.
- O JRE fornecido foi atualizado para Java 7.
O que é novo na versão 12.0.3:
- Suporte para FreeBSD 8 tem melhorado
- O carregamento de fotos com uma grande quantidade de GC é muito otimizado.
- Esta versão resolve alguns problemas com o JBoss, GlassFish, e Felix OSGi.
O que é novo na versão 12.0.1:
- Novas Plataformas suportadas:
- Linux on ARM: a execução de aplicações de perfil e / ou a interface do usuário profiler é suportado em soft-float (ARMv5, ARMv7) e hard-float (ARMv7) JVMs
- Linux em PPC: a execução de aplicações de perfil e / ou a interface do usuário profiler é suportado em 32-bit (ppc) e 64-bit (ppc64) JVMs
- Profiling CPU:
- CPU rastreamento aéreo foi reduzido significativamente (diferentes aplicações perfilados executar até 10% -50% mais rápido do que com a versão profiler anterior) ea exatidão foi aumentado devido às seguintes melhorias:
- novo modo de rastreamento adaptável reduz automaticamente o rastreamento sobrecarga e torna os resultados mais adequada (ver configurações de rastreamento de CPU)
- rastreamento CPU agora mede o tempo parede por padrão (veja CPU configurações e medição do tempo de rastreamento).
- Isto reduz a sobrecarga de perfis porque a obtenção de tempo parede é mais rápido do que a obtenção de tempo de CPU.
- tempo Wall, também é mais preciso do que o tempo de CPU, proporcionando uma precisão de nanossegundos poucos quando se mede intervalos de tempo.
- melhorias internas redução da sobrecarga de perfis
- All CPU profiling configurações aplicadas em tempo de execução está configurado nas definições de amostragem CPU e as configurações de rastreamento de CPU
- Por favor, note que as alterações relacionadas:
- API: foram adicionados dois novos métodos Controlador: startCPUTracing (configurações de cordaNullable) e startCPUSampling (configurações de cordaNullable). Métodos startCPUProfiling (...) foram reprovados.
- J2EE de alta nível de perfil está configurado nas definições de amostragem CPU e as configurações de rastreamento de CPU
- opção de inicialização noj2ee foi removido em favor da propriedade high_level_cpu_profiling em configurações de amostragem de CPU e configurações de rastreamento de CPU
- opções de inicialização PeriodoMuestreo e samplingdelta foram removidos em favor dos sampling_period_ms e sampling_period_delta_ms propriedades em configurações de amostragem CPU
- medição do tempo é agora configurado nas definições de amostragem de CPU e as configurações de rastreamento de CPU. A .walltime arquivo de configuração separado e uma opção de inicialização dedicado walltimespec não são mais utilizados.
- filtros de opção de arranque foi removido em favor de configurações de rastreamento de CPU
- traçado CPU: métodos de tempo parede já não são tratados implicitamente como sempre não-filtrada. O comportamento anterior pode criar uma sobrecarga inesperada se a medição do tempo de parede foi configurado para muitos ou todos os métodos.
- Agent: medição do tempo foi melhorado para assegurar monotonicity quando apropriado
- CPU amostragem: bug corrigido: método wrappers nativas $$ YJP $$ podem aparecer nas pilhas
- Profiling memória:
- UI: novo recurso: visão de árvore de classe é semelhante ao & quot; Classe lista & quot ;, mas mostra classes agrupadas por pacote
- UI: Novo recurso: vistas de memória, tais como lista de classes permitem a seleção de várias linhas. Isso afeta escravo vê conteúdo, bem como as acções, tais como & quot; Ver Objects & quot selecionada; e outros.
- & quot; duplicados cordas & quot; inspeção: os resultados são apresentados sob um nó raiz novo agrupamento que apresenta o total de resíduos em todas as seqüências duplicadas
- Optimization: instantâneos com matrizes primitivas grandes são abertos mais rápido
- UI: otimização: desempenho de & quot; Referências recebidas & quot; view foi melhorado dramaticamente
- UI: melhorou cálculo do tamanho exato retidos em & quot; Classe lista & quot; e pontos de vista semelhantes: mais itens são processados por clique, se a velocidade de cálculo permite
- UI: melhoria: disponíveis núcleos de CPU são usados para computações paralelas nos seguintes pontos de vista:
- lista Class
- árvore Class
- Gerações
- escopos Alcançabilidade
- Carregadores de classe
- aplicativos da Web
- idades objeto
- UI: melhoria: & quot; Calcular exata retido tamanhos & quot; ação usa núcleos de CPU disponíveis para executar cálculos em paralelo
- UI: melhoria: & quot; Calcular exata retido tamanhos & quot; ação não forçar a classificação por tamanho da coluna mantida se o cálculo é continuada
- Optimization: gravação de alocação de custos indiretos foi reduzido para aplicações de vários segmentos. Quão grande é a melhoria depende de & quot; registro cada objeto & quot N-th; configuração. De acordo com testes, código que está sendo perfilado executado até 30% mais rápido quando cada objeto 10 é registrado (a configuração padrão), e até 70% mais rápido quando cada objeto 100 é registrado, comparando com a versão anterior
- aplicações Web: melhoria: web caminho do contexto da aplicação (URL) é agora mostrado, além de nome do aplicativo web
- aplicações Web: suporte adicional de Jetty (versões 6, 7, 8)
- telemetria contagem instância Class (& quot; & quot Lista classe; tab), ao contrário de outros pontos de vista de telemetria, não atualiza automaticamente periodicamente. Isto é para considerações de desempenho:. Recolha das estatísticas podem levar um tempo significativo em caso de enormes pilhas com muitos objetos, portanto, deve ser executado sob demanda
- Em vez disso, ele atualiza quando:
- & quot; Atualizar & quot; botão for pressionado quando a guia é visível (uma atualização explícito)
- & quot; Força Garbage Collector & quot; botão for pressionado quando a guia é visível (que faz sentido para ver imediatamente as alterações nas contagens e tamanhos de objeto depois de forçar coleta de lixo)
- um instantâneo é capturado (reunindo as estatísticas é uma parte da captura)
- UI: Caminhos: Corrigido o erro: duplicar entradas de caminho poderia ser mostrado em determinadas circunstâncias
- Telemetria:
- CPU:. kernel do tempo de CPU é mostrada como uma curva separada, além de o usuário principal do kernel + gráfico de tempo de CPU
- AIX: sabemos duas funções para medir processo tempo de CPU no AIX: clock_gettime (CLOCK_PROCESS_CPUTIME_ID) e rusage (). O primeiro é usado por padrão, porque parece produzir melhores resultados do que o seu homólogo. No entanto, ele tem uma desvantagem: ele não dá kernel e usuário vezes separadamente. Isto significa que você não vai ver a telemetria tempo kernel. Para habilitá-lo, especifique opção de inicialização agente _with_rusage usar rusage () em vez disso.
- renderização Graph foi otimizado, tornando UI muito mais ágil, especialmente ao usar escalas maiores
- estado do segmento de telemetria: bug corrigido: amostras de telemetria pode acontecer a taxa mais baixa, resultando em lacunas no gráfico fio telemetria estado
- Sondas:
- Novo recurso: capacidade de limpar as mesas. Livrar-se dos eventos mais antigos que você não está interessado em mais, ou dar espaço para novos eventos, se o limite de capacidade mesa foi atingido.
- Para limpar a tabela de interface do usuário, use & quot; Limpar mesa (s) ... & quot; link localizado no canto superior direito do & quot; Sondas & quot; tab.
- Para limpar as mesas de programação, use o método Controller.clearUserTables API profiler (String ... tablenames)
- UI: & quot; Sondas & quot; guia de layout foi alterado para dá mais espaço vertical para navegar listas de eventos, e fazer a interface do usuário mais consistente. Agora guias mesas, o espaço temporal, árvore chamada evento e estimativa de uso da CPU estão localizados no mesmo nível.
- Class pode ser ativado com sonda opção de inicialização = carregamento de classe (o padrão) e desativado com a opção de inicialização noprobe = carregamento de classe. Builtinprobes opção de inicialização = nenhum agora implica noprobe = carregamento de classe.
- Sondas: API: preterido com.yourkit.probes.ObjectIntWeakMap classe foi removida. Use com.yourkit.probes.ObjectRowIndexMap vez.
- & quot; & quot Passe Ciclo de Vida; built-in sonda: bug corrigido: eventos de alteração de nome foram incorretamente associado por alguns JVM roscas internas
- Triggers:
- o padrão aciona arquivo de descrição foi alterada para /.yjp/triggers.txt
- Integração IDE:
- Eclipse, IntelliJ IDEA, NetBeans 7.0 e mais recentes plug-in detecta automaticamente JVMs de 32 bits e 64 bits.
- O & quot; Perfil & quot; ação deve saber se a JVM para o lançamento do aplicativo de perfil é de 32 bits ou de 64 bits, a fim de fornecer a versão do agente adequado.
- Anteriormente, o plug-in totalmente contado com a escolha do usuário no & quot; 32-bit ou 64-bit JRE Seleção & quot; guia da configuração do plugin. A escolha errada resultou na JVM falha Ocorreu um erro durante a inicialização da VM. Não foi possível encontrar biblioteca do agente.
- Agora, é feita uma tentativa para detectar automaticamente o tipo JVM pela obtenção de informações disponíveis a partir do IDE. Se a detecção for bem-sucedido, seu resultado substitui a escolha feita pelo usuário.
- Isso faz com que o & quot; Perfil & quot; trabalho de ação fora da caixa na maioria dos casos.
- Nota: nós manteve o & quot; 32-bit ou 64-bit JRE Seleção & quot; guia como um backup para os casos em que a detecção automática é impossível.
- Eclipse: configurações de execução do Maven suporte no Eclipse 3.7 e mais recentes
- IntelliJ IDEA 12 suportado
- NetBeans 7.3 suportado
- O NetBeans: bug corrigido: profiling única classe ou teste JUnit pode não funcionar em projetos da Web
- J2EE Integração:
- Assistente de Integração do J2EE: adicionado Jetty 6 e suporte mais recente
- User Interface
- Melhoria: o grupo guia vertical esquerda que representa instantâneos abertos e aplicações conectadas agora tenta evitar o scroller se muitas abas são abertas, encurtando os títulos das guias. Se o título completo guia não se encaixa, ele ainda estará acessível através de uma dica de ferramenta.
- Filtros: adicionada uma forma rápida de alternar entre a aplicação ea não aplicação de filtros na interface do usuário:
- com um novo item de menu Ajustes principais | Recolher Convida filtradas
- na barra de ferramentas quando o profiler estiver conectado a um aplicativo em execução
- & quot; Filtros ... & quot; hyperlink no Legend quando se trabalha com um instantâneo
- Escalabilidade: para fazer interface do usuário mais ágil quando se trabalha com enormes instantâneos, & quot; Chamados lista & quot; vista escravo não é calculada automaticamente, logo que a seleção nas alterações da tabela mestre. Em vez disso, o cálculo deve ser explicitamente iniciado clicando em um link. Por padrão, o cálculo automático é realizada para instantâneos com menos de 1.000.000 de quadros de chamada (ou seja, pilhas originais), que abrange a grande maioria dos instantâneos do mundo real. Para alterar o limite, especifique -Dyjp.callees.auto.threshold = número de quadros em /bin/yjp.ini.
- Adicionado suporte de esquemas de cores de alto contraste. Para usá-lo, por favor especificar -Dyjp.system.colors = true no /bin/yjp.ini.
- script de inicialização yjp.sh melhorado: se variável de ambiente YJP_JAVA_HOME é especificado que tem priorado sobre JRE empacotados e padrão do sistema Java, que fornece uma oportunidade para executar a interface do usuário profiler sujeitos a versão Java sem editar o script de inicialização
- Resumo: adicionou & quot; line Command & quot; propriedade para representar a linha de comando completo do processo Java
- árvore de chamada e remonta vista: adicionou item de menu de contexto para expandir nó selecionado até 5 níveis, como um suplemento para o item existente que expande o nó totalmente
- Melhoria: estilo de diálogo unificado em matéria de ajuda e não de fechamento local do botão
- Bug corrigido: a janela do profiler pode tornar-se invisível após profiler reinicialização se um dos monitores utilizados anteriormente não estava mais disponível
- Bug corrigido: exceção estouro de pilha em determinadas circunstâncias raras
- Bug corrigido: seleção de arquivos chamado de Open de diálogo Snapshot manuseados incorretamente tecla Enter, ao executar UI em Java 7
- Variado:
- Exportar com linha de comando: lista de classe é exportada para instantâneos de desempenho também (como visto na guia Memória | lista de classe)
- Advertência: arquivo de configuração do diretório de captura instantânea é agora /.yjp/snapshotdir.txt
- instalador do Windows: o Profiler agora é fornecido com Java 7 JRE. Nota:. Java 6 continua a ser uma plataforma totalmente suportado
- Agent: log nome do arquivo é agora -.log a melhores registos separados de diferentes aplicações
- Agent:. adicionado uma opção para armazenar os logs de várias corridas do mesmo aplicativo em uma série de arquivos de log nomeados ..log em vez de criar um arquivo de log -.log individual para cada processo perfilado
- Este modo pode ser útil ao perfil de aplicativos, como servidores, quando ter um log unida é melhor do que ter um registro separado para cada inicialização do servidor.
- Para utilizar este modo, especifique opção de inicialização united_log
- O nome da sessão é o nome do aplicativo como pode ser visto na interface do usuário profiler, e que também é usado por padrão para nomear snapshots do aplicativo. Ele é automaticamente escolhido para aplicação especial baseando em seu nome de arquivo jar, ou o seu nome da classe principal, ou o nome do executável sob encomenda, ou no nome da configuração de execução ao criar o perfil a partir do IDE. O nome da sessão também pode ser explicitamente especificado com a opção de inicialização sessionname =
- Correndo número começa com 1. Se o primeiro arquivo de log .1.log excede o limite de tamanho, um novo arquivo de log .2.log será criado e usado, então .3.log etc. O limite de tamanho é de 1 MB por padrão, e pode ser alterado com a opção de inicialização log_file_size_limit =
- Nota: os arquivos de log mais antigos não são removidos automaticamente. Se você precisa limpá-los, fazê-lo manualmente ou escrever um script.
- Agent: Groovy 2.0 suportado
- Agent: rastreamento de CPU e alocação de recodificação sobrecarga ligeiramente reduzida em IBM Java
- Agent: bug corrigido: modo de conexão: manipulador de exceção incorreta no construtor em determinadas circunstâncias
- Agent: bug corrigido: possível java.lang.VerifyError: quadros stackmap inconsistente no destino de desvio para padrões de código específicos compilados com o compilador Eclipse
- UI: remoto profiling: bug corrigido: aplicações de perfil remoto em execução em máquinas diferentes, configurado para usar a mesma porta e começou ao mesmo tempo não podia ser conectados simultaneamente no profiler UI
telemetria utilização
nota
sonda carregamento
O que é novo na versão 10.0:
- Esta nova versão principal contém um monte de novas funcionalidades, melhorias e correções de bugs. Apoio da AIX (ppc e ppc64) plataforma foi adicionado.
- Uma nova & quot; gatilhos & quot; O recurso permite aos usuários executar automaticamente ações diferentes sobre eventos específicos (alta CPU ou uso de memória, execução de método, etc.).
- gravação Allocation pode reunir as estatísticas do coletor de lixo por classe.
- Desempenho pode ser extraído a partir de instantâneos de memória.
- A precisão da calibração de rastreamento CPU foi melhorada.
- uso de CPU e tempo gasto no coletor de lixo agora são mostrados no mesmo gráfico.
- Como foram implementadas habituais, muitas melhorias para a interface do usuário.
instantâneos
O que é novo na versão 9.5.1:
- Melhoria: mais aplicativos contêiner OSGi podem ser perfilado sem a necessidade de Twick manualmente as configurações de OSGi para permitir o carregamento das classes Profiler. Em particular, isso inclui GlassFish 3.1.
- Integração IDE: melhoradas NetBeans plugin de instalação no Windows Vista e Windows 7. Anteriormente, o assistente de integração IDE pode falhar se NetBeans foi instalado em um diretório protegido, como & quot; & quot Arquivos de Programas; devido ao Controle de Acesso Usuário do Windows (UAC). Agora, prompt do UAC apropriado é mostrado quando necessário, deixando o assistente ter sucesso.
- integração IDE NetBeans 7.0: M2 suportado
- Integração IDE: profiler plugin de interface do usuário: melhorias
- UI: tela de boas vindas: melhor usabilidade em telas de baixa resolução
- UI: diálogo aberto instantâneo: o agrupamento instantâneos por sessão agora é opcional
- Bug corrigido: UI: diálogo aberto instantâneo pode atualizar indevidamente em determinadas circunstâncias raras
Limitações :
- 15 dias de avaliação
Comentários não encontrado