Item 67: Seja criterioso ao otimizar
Java Efetivo (livro)
Posted on October 31, 2024
1. Evitar Otimização Prematura
Principais máximas:
- Muitas vezes, o desempenho é sacrificado em nome de otimizações desnecessárias.
- Otimização prematura é considerada a "raiz de todo o mal" na programação.
As regras recomendadas são:
- Regra 1: Não otimize.
- Regra 2: Só otimize quando a necessidade estiver clara e inevitável.
2. Foque na Arquitetura de Código Clara e Correta
- Objetivo inicial: Crie programas bem-estruturados e de fácil manutenção antes de focar em desempenho.
- Se a base arquitetural estiver sólida, otimizações podem ser adicionadas posteriormente sem comprometer a integridade do código.
- Encapsulamento: Utilize a ocultação de informações para isolar as escolhas de design, facilitando mudanças e melhorias locais sem impactar o sistema como um todo.
3. Considere o Desempenho no Design Inicial, mas Evite Compromissos Prematuros
- Durante o design, evite escolhas que restrinjam o desempenho futuro, especialmente em:
- APIs: Certifique-se de que métodos críticos não adicionem penalidades de desempenho, como a criação de objetos desnecessários.
- Formatação de dados persistentes: Escolha formatos de dados que permitam flexibilidade e eficiência.
- Exemplo de API ineficiente: O método getSize da classe java.awt.Component retorna um objeto Dimension mutável, exigindo alocações desnecessárias e impactando o desempenho.
4. Avalie Desempenho com Ferramentas Adequadas (Profiling e Benchmarking)
- Profilers: Use ferramentas de profiling para identificar onde o programa consome mais tempo, evitando otimizar partes que não são o verdadeiro gargalo.
- Exemplo de ferramenta: jmh (Java Microbenchmark Harness) é recomendado para micro-benchmarking de desempenho detalhado em Java.
- O profiling ajuda a identificar algoritmos ineficientes (por exemplo, quadráticos) que devem ser substituídos por algoritmos mais eficientes antes de focar em melhorias de baixo nível.
5. Considerar Portabilidade e Variabilidade de Desempenho em Diferentes
- Implementações e Hardware
- O desempenho em Java pode variar amplamente entre versões de JVM, plataformas de hardware e configurações.
- É importante verificar as otimizações em todas as plataformas de destino para garantir a consistência do desempenho.
6. Processo de Otimização Pós-Desenvolvimento
Passos recomendados:
- Finalize o design e implemente uma versão clara e concisa do programa.
- Avalie o desempenho geral. Se necessário, localize e otimize as áreas que mais afetam a performance.
- Priorize a escolha de algoritmos eficientes; uma escolha inadequada de algoritmo não é resolvida com otimizações de baixo nível.
- Meça o desempenho após cada ajuste para confirmar o impacto positivo.
Resumo Final
- Boa prática: Concentre-se em escrever código de qualidade, pois um bom design é geralmente compatível com um desempenho eficiente.
- Avaliação constante: Sempre meça o impacto das otimizações no desempenho.
- Exemplo geral: Quando métodos críticos impactam a eficiência devido a objetos desnecessários, considere alternativas como tipos imutáveis ou métodos que retornam valores primitivos em vez de objetos, reduzindo alocações e tornando o programa mais rápido e eficiente.
💖 💪 🙅 🚩
Java Efetivo (livro)
Posted on October 31, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
career Burnout, Imposter Syndrome & More: What Junior Devs Really Experience 🕵️♀️
November 28, 2024