Viver na era digital é tanto uma bênção quanto uma frustração. Quando computadores e aplicativos funcionam sem problemas, tendemos a considerá-los garantidos. Porém, quando um computador congela ou um aplicativo atola um laptop ou dispositivo móvel, o baixo desempenho aumenta o estresse.
Seja você um desenvolvedor que tenha acesso ao código-fonte ou simplesmente um usuário final tentando acelerar um aplicativo Java irritantemente lento, temos boas notícias: existem etapas que você pode seguir para melhorar o desempenho.
Java é o mesmo que JavaScript?
Em suma, não; Java e JavaScript são duas tecnologias completamente diferentes. Embora sejam ambas tecnologias orientadas a objetos, Java é um ambiente de desenvolvimento no qual os programadores podem codificar aplicativos projetados para execução local na memória do sistema.
O JavaScript, por outro lado, foi projetado para criar aplicativos da Web e frequentemente coincide com outras tecnologias da Web, como HTML e CSS. Hoje, procuraremos as melhores maneiras de melhorar o desempenho de aplicativos escritos em Java, mas não em JavaScript..
Causas de baixo desempenho do aplicativo
As causas de um aplicativo com baixo desempenho são vastas, embora as principais causas sejam um pequeno punhado de problemas. Naturalmente, as duas primeiras causas são mau design e codificação sub-par.
Embora os IDE e os editores de código destacem objetos e testes para torná-los mais legíveis para humanos, existe uma lacuna de comunicação entre computadores e humanos. Você cometerá erros ao criar um aplicativo – não há como contorná-lo.
O computador às vezes não entende sua intenção. Em vez disso, ele apenas executa as instruções fornecidas. Além das falhas algorítmicas e de codificação, as deficiências de recursos são outra causa comum.
O hardware local, como os ciclos de RAM e CPU, afeta o desempenho do aplicativo, assim como outros recursos, como a largura de banda da rede. Além disso, observe que os problemas locais do sistema operacional geralmente afetam o desempenho do aplicativo.
Como melhorar o desempenho do aplicativo Java – 9 etapas
Antes de nos aprofundarmos em cada etapa específica, queríamos fornecer uma visão geral de alto nível sobre como melhorar o desempenho dos aplicativos Java, da seguinte maneira:
- Executar teste de perfil e carregamento – criar um perfil do seu aplicativo Java ajudará a descobrir pontos problemáticos e gargalos.
- Limpar código e revisar algoritmos – código limpo é mais fácil de manter, editar, ler e refinar; revisar seus algoritmos reduz chamadas de função tautológicas.
- Evite recursão quando possível – a recursão é um mal necessário em alguns casos, embora deva ser usado com moderação.
- Atualizar o hardware do sistema – O desempenho ruim do aplicativo pode não estar enraizado em códigos e algoritmos ruins; em vez disso, a causa subjacente pode estar relacionada ao sistema executando o aplicativo.
- Aumentar a largura de banda da LAN e WAN – nem todas as funções interagem com o hardware local; se seu aplicativo falar com sistemas remotos, sua infraestrutura de rede pode ser a responsável.
- Arrume seu sistema operacional – sistemas operacionais bagunçados precisam de manutenção para executar aplicativos da melhor maneira possível.
- Empregue o StringBuilder para melhorar a eficiência – strings são quase inevitáveis na maioria das aplicações, mas a operação “+ =” é altamente ineficiente.
- Explorar o cache para melhorar o desempenho – o cache é uma das melhores maneiras de reduzir instâncias redundantes de objetos e chamadas de função.
- Favorecer a pilha sobre a pilha – a pilha é mais eficiente em relação aos recursos do sistema, porque se mantém e libera a memória que objetos extintos ocupam.
Com isso dito, vamos nos aprofundar um pouco mais em cada método para melhorar o desempenho do aplicativo Java.
1. Execute testes de perfil e carregamento
O primeiro passo para melhorar o desempenho dos aplicativos Java é identificar áreas para aprimoramento. Sem saber onde estão os maiores problemas, tentar acelerar um aplicativo é como jogar um dardo em um alvo de olhos vendados. Felizmente, existem ferramentas de software que coletam dados sobre o desempenho do aplicativo.
A primeira ferramenta que recomendamos é o software de criação de perfil Java. Um exemplo é YourKit, que é uma solução apropriada para empresas e usuários individuais. YourKit oferece uma variedade de licenças, como opções corporativa, acadêmica, de código aberto e por vaga.
Seus recursos incluem, entre outros, o seguinte:
- Perfil de desempenho da CPU
- Perfil de desempenho de memória
- Detecção de vazamento de memória
- Threads e análise de sincronização
- Teste de desempenho da Web, banco de dados e E / S
Essa ferramenta foi projetada para ser usada em sistemas locais, sistemas remotos, projetos atualmente em desenvolvimento e até software de produção. YourKit No entanto, não é o único Java Profiler de qualidade e possui forte concorrência de outras soluções como EJ-Technologies, que criou o JProfiler.
Esta ferramenta é muito semelhante a YourKit e fornece opções de teste para sessões locais e remotas, gatilhos offline, comparações de instantâneos, rastreamento de solicitações (HTTP, RMI, serviço da Web, eventos EJB, AWT, início de encadeamento etc.) e criação de análise personalizada, entre muitos outros recursos. Por último, JProfiler também possui ferramentas de perfil de hardware, encadeamento, telemetria e banco de dados.
2. Limpe o código e revise os algoritmos
O código-fonte do software é como o primeiro rascunho de um romance – nunca é perfeito após a primeira iteração e requer revisões significativas antes de finalmente ser polido. Em primeiro lugar, você deve escrever um código limpo, saturado de comentários, para poder navegar pelo texto e lembrar facilmente por que cada objeto foi instanciado e por que cada função foi chamada..
Embora manter seu código limpo não acelere por conta própria um aplicativo Java, ele ajuda a remover de forma mais eficiente códigos desnecessários e a procurar pontos fracos e redundantes em seus algoritmos. O código limpo torna o processo de depuração mais fácil também e ajuda a corrigir erros (como vazamentos de memória) identificados após a criação de perfil e o teste de carga do software.
3. Evite recursão quando possível
A recursão é uma estratégia de programação básica na qual uma função se chama para resolver um problema. A recursão não é necessariamente má, no entanto, é uma faca de dois gumes. Tem benefícios e usos práticos. Por exemplo, a recursão torna o código mais limpo e compacto e reduz as iterações tautológicas de loops e funções.
Como a recursão reduz a complexidade e o volume do código, ajuda a facilitar a manutenção de um aplicativo Java. Infelizmente, esses benefícios têm o preço de desempenho do aplicativo. As chamadas de recursão e função são caras no que diz respeito à velocidade e ao desempenho, porque exigem funções pop e push na pilha.
Uma solução mais eficiente para recursão, por outro lado, é o loop. As operações de loop podem ser mais difíceis de ler e são compostas por mais caracteres e código fonte do que recursão, mas são preferíveis quando o desempenho do aplicativo deve ser maximizado. Nem sempre é prático renunciar completamente à recursão, mas mitigá-la o máximo possível ajudará a melhorar o desempenho dos aplicativos Java.
4. Atualize o hardware do sistema
Aparentemente, pode parecer que um aplicativo Java com baixo desempenho deve ser causado por um problema de software. Embora possa parecer contra-intuitivo, a causa raiz do mau desempenho pode ser um problema de hardware. Esteja você executando um aplicativo Java local ou remotamente, o sistema no qual o aplicativo Java está executando pode não ter recursos suficientes para executar o código satisfatoriamente.
O componente mais fácil de atualizar que normalmente afeta diretamente o desempenho do software é a RAM. Ao expandir a quantidade de memória no seu computador, você reduz a chance de o sistema ficar sem espaço de armazenamento para os dados do aplicativo e ser forçado a voltar a usar o disco rígido como RAM improvisada. Essa prática é conhecida como arquivo de paginação e, embora tenha usos práticos, os arquivos de paginação são mais indesejáveis para aplicativos de alto desempenho que a RAM, porque o processo de leitura e gravação é significativamente mais lento no disco rígido.
Além disso, se o seu aplicativo Java interage significativamente com o disco rígido (como um aplicativo de backup ou sincronização de dados), a atualização do disco rígido pode melhorar o desempenho do sistema. Por exemplo, você pode atualizar para uma unidade com RPMs mais altos para procedimentos de leitura e gravação mais rápidos. No entanto, observe que os discos rígidos mais rápidos são SSDs (Solid State Drives) e não contêm partes móveis. Por fim, alguns sistemas, mas não todos, também são capazes de expandir a CPU, embora não seja tão fácil atualizar como a RAM.
5. Aumente a largura de banda da LAN e WAN
Embora o hardware local e do servidor seja um componente essencial dos aplicativos Java, incluindo aplicativos da Web Java, não é o único gargalo em potencial. Se você hospeda aplicativos da Web Java localmente em uma LAN, em uma intranet ou remotamente, a largura de banda desempenha um papel crucial no que diz respeito à disponibilidade e ao desempenho de seus aplicativos – especialmente durante períodos de pico de carregamento.
De um modo geral, a largura de banda da LAN é geralmente abundante e barata, enquanto a largura de banda da WAN é cara e escassa. No entanto, outro tráfego de LAN pode estar sobrecarregando a rede local à qual o servidor que está executando os aplicativos Web Java está conectado. Esse problema pode ser tratado de uma de duas maneiras.
Primeiro, você pode optar por atualizar os switches e a infraestrutura de rede local para uma solução Gigabit Ethernet ou 10Gigabit Ethernet para aliviar o congestionamento da rede. Como alternativa, você pode implementar uma política de QoS (Qualidade de Serviço) que priorize o tráfego de e para o servidor que hospeda aplicativos Java acima de outros tipos de tráfego.
Além disso, além de aumentar a largura de banda da WAN (que pode exigir a seleção de um ISP diferente), você pode implementar o balanceamento de carga para aproveitar melhor as conexões de ISP redundantes. Lembre-se de que aplicativos Java com baixo desempenho podem não ser necessariamente causados por problemas de software e podem ser afetados pelo congestionamento da rede.
6. Arrume seu sistema operacional
Os sistemas operacionais exigem limpeza e manutenção para executar com desempenho máximo e usar com eficiência os recursos do sistema. Um sistema operacional desleixado tem uma tendência a desacelerar e se sentir lento. Por exemplo, você pode ter muitos processos invisíveis em execução em segundo plano que você nem sabia sobre.
Além disso, o procedimento de instalação de muitos aplicativos adiciona automaticamente novo software à lista de aplicativos iniciados na inicialização. Esses aplicativos não apenas fazem com que o sistema inicialize mais lentamente, mas também consomem recursos vitais do sistema, como ciclos de RAM e CPU, que poderiam ser usados para executar um aplicativo Java.
A remoção de processos e aplicativos necessários e indesejáveis ajudará a arrumar o sistema operacional, assim como a execução de um limpador de registro nos sistemas Windows. Um limpador de registro pode atenuar e eliminar erros de DLL e erros de tempo de execução removendo entradas incorretas no registro e regenerando estruturas de índice.
Além disso, outra tarefa de limpeza – que deve ser usada com moderação – é desfragmentar o disco rígido. Com o tempo, à medida que os arquivos são gravados e excluídos continuamente de um disco rígido, eles podem se tornar uma bagunça caótica. Uma ferramenta de desfragmentação reúne todos os seus dados e os reescreve em blocos contíguos, o que reduz o tempo para o disco rígido ler informações.
Mas esteja avisado: o processo de desfragmentação é muito exigente e exigente no disco rígido. Se você desfragmentá-lo diariamente, semanalmente ou até mensalmente, diminuirá drasticamente a vida útil do seu disco rígido. Uma frequência mais razoável e prática é de duas a três vezes por ano.
7. Empregue o StringBuilder para melhorar a eficiência
As strings são um tipo de dados comum na grande maioria dos aplicativos – são muito difíceis de evitar ou ignorar. Infelizmente, a concatenação de strings é tão ineficiente quanto frequente. Pode parecer que a melhor maneira de concatenar seqüências de caracteres é com a operação “+ =”, mas essa é uma operação em uso excessivo que é extremamente ineficiente.
O problema é que a operação “+ =” aloca uma sequência totalmente nova toda vez que é usada, o que pode criar muitos dados de sequência redundantes e desnecessários. Embora o uso desta operação de vez em quando não faça com que seu aplicativo Java seja interrompido, todas as pequenas operações são adicionadas. Imagine quantas vezes essa ineficiência pode ser ampliada em um loop?
Felizmente, existe uma alternativa mais eficiente. o StringBuilder O objeto foi projetado como uma alternativa eficiente às operações básicas de concatenação. Adquira o hábito de usar esse tipo de dados em vez de usar a abreviação lenta da operação “+ =” se desejar melhorar o desempenho dos aplicativos Java.
8. Explorar o cache para melhorar o desempenho
O armazenamento em cache é uma das maneiras mais eficazes de aumentar a eficiência dos aplicativos Java. O conceito principal do armazenamento em cache é consolidar várias chamadas e funções em um recurso reutilizável. Embora existam muitas formas de armazenamento em cache, quando a maioria das pessoas aqui usa a palavra “armazenamento em cache”, a primeira coisa que vem à mente é a tecnologia de banco de dados.
Não apenas os dados contidos em um banco de dados podem ser armazenados em cache localmente para economizar largura de banda, mas também o alto volume de conexões com o banco de dados que, de outra forma, diminuiriam a velocidade de um aplicativo. No entanto, esteja ciente de que o cache não deve ser usado em excesso. Você pode pensar intuitivamente que tudo deve ser armazenado em cache, caso precise usá-lo novamente em um futuro próximo. No entanto, você precisa garantir que os dados e as conexões armazenadas em cache sejam numerosos o suficiente para obter um ganho no desempenho.
9. Favorie a pilha sobre a pilha
Para melhorar o desempenho do aplicativo Java, armazene seus dados na pilha em vez da pilha. Porque você pergunta? Porque ele usa a memória com mais eficiência e remove os dados que já cumpriram seu objetivo. A pilha não apenas usa os recursos com mais eficiência, como também mantém a sobrecarga sob controle. A melhor maneira de favorecer a pilha sobre a pilha é evitar instanciar classes de wrapper.
Assim como o uso de recursão, nem sempre é possível (ou mesmo possível) renunciar ao uso de uma classe de wrapper. Mas, como regra geral, você deve usar tipos de dados primitivos como “int” em oposição a Inteiro. O número de ganhos de desempenho que você pode obter ao empregar essa tática depende de uma infinidade de fatores. No entanto, favorecer a pilha é um bom guia para encontrar o caminho para o código Java mais enxuto e eficiente.
Existem ferramentas no mercado para ajudá-lo a atualizar com êxito os patches Java. Uma dessas ferramentas é SolarWinds Patch Manager.
Você pode baixar um sistema totalmente funcional Avaliação gratuita de 30 dias
SolarWinds Patch ManagerDownload gratuito de 30 dias
Relacionado: Melhores ferramentas de gerenciamento de patches
Além disso, você deve verificar o Ferramenta de monitoramento Java da SolarWinds para servidores de aplicativos com servidor & Monitor de Aplicação para melhorar o desempenho. Você pode baixar um sistema totalmente funcional Avaliação gratuita de 30 dias.
Ferramenta de monitoramento Java da SolarWinds para servidores de aplicativos com SAMDownload gratuito de 30 dias
Pensamentos finais
Se um aplicativo Java lento e rastejante estiver fazendo seu sangue ferver, respire fundo e lembre-se de não bater com os punhos no teclado – isso só piorará as coisas. Em vez disso, respire fundo e use um dos métodos acima mencionados para acelerar o desempenho de aplicativos Java.
Se você tiver histórias pessoais ou histórias sobre a aceleração de aplicativos Java, convidamos você a comentar abaixo.
nte ineficiente. O uso do StringBuilder pode melhorar significativamente o desempenho. Explorar o cache para melhorar o desempenho – o cache é uma área de armazenamento temporário que pode ser usada para armazenar dados frequentemente acessados, melhorando o desempenho do aplicativo. Favorie a pilha sobre a pilha – a pilha é mais rápida do que a pilha, portanto, sempre que possível, use a pilha para armazenar dados temporários. Em resumo, melhorar o desempenho do aplicativo Java pode ser uma tarefa desafiadora, mas seguindo essas nove etapas, você pode melhorar significativamente o desempenho do seu aplicativo. Lembre-se de que o desempenho do aplicativo é afetado por vários fatores, incluindo design, codificação, recursos de hardware e sistema operacional. Portanto, é importante abordar cada um desses fatores para obter o melhor desempenho possível.