Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Artigo Java Magazine 35 - Otimizando Código Java
Artigo publicado pela Java Magazine 35.

Atenção: por essa edição ser muito antiga não há arquivo PDF para download.Os artigos dessa edição estão disponíveis somente através do formato HTML.
Otimizando Código Java
Truques e Dicas para Obter o Máximo de Desempenho
O tema de otimização de código é inesgotável, e nesta coluna já falamos de desempenho em inúmeras oportunidades. Vimos desde otimizações implementadas pelas JVMs (como algoritmos de compilação JIT ou de garbage collection, recentemente na Edição 30) até APIs especificamente orientadas a programação de alto desempenho (como a java.util.concurrent, na Edição 20). Também mostramos técnicas de otimização específicas a certos domínios, como XML (Edição 22) ou JDBC (Edições 25 e 26).
Por outro lado, no dia
Muito dessa teoria geral de otimização faz parte de cursos e livros sobre programação, algoritmos, e outros domínios da computação. Por exemplo, ao estudar muitas linguagens de programação, aprendemos que é mais eficiente fazer cálculos com variáveis inteiras do que com ponto flutuante[1]. Em algoritmos, aprendemos que um quicksort é mais eficiente que um bubblesort; em estruturas de dados, que uma lista encadeada é melhor que um array para inserções; e num domínio como bancos relacionais, aprendemos a utilizar índices, fazer joins eficientes etc. Mas não vamos falar dessas técnicas clássicas, que são muito bem cobertas por cursos e livros tradicionais.
Ao invés disso, vamos abordar a otimização de código com foco na exposição de princípios fundamentais, que são independentes de algoritmos ou de domínios específicos. O artigo usará dicas e exemplos em Java, explorando alguns "padrões" de ineficiência que são encontrados com freqüência
Leis fundamentais da otimização de código
Para começar, vamos formalizar alguns "mandamentos" principais. Pesquisei e não encontrei nenhuma lista de "leis" desse tipo, portanto o que se segue é uma tentativa de organização de princípios fundamentais.
1. Otimização PREMATURA é a fonte de todo o mal.
Esta lei, já famosa, foi enunciada por Tony Hoare (o criador do algoritmo quicksort, entre outras técnicas de alto desempenho). Também foi divulgada por Donald Knuth (o autor do clássico The Art of Computer Programming, uma série de livros com grande foco no desempenho de algoritmos). Vindo dessas fontes insuspeitas, é algo a ser levado muito a sério!
O problema é que otimizar código é uma atividade que implica em certos custos, perigos e possíveis efeitos colaterais. Um código otimizado pode sofrer de vários poréns:
· Ainda não foi testado, enquanto a versão não
· É geralmente mais complexo, resultando em maior probabilidade de ocorrência de bugs.
· É freqüentemente mais frágil. Muitas técnicas de otimização confiam em pressupostos "otimistas" sem os quais não são seguras. (Teremos exemplos disso neste artigo).
· É mais difícil de dar manutenção. E com freqüência códigos de "gurus" responsáveis pelas otimizações têm que ser alterados por programadores menos experientes, já com o criador não mais disponível.
"
Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Osvaldo Pinali Doederlein
é Mestre em Engenharia de Software Orientado a Objetos e Arquiteto de Tecnologia da Visionnaire Informática, trabalhando em projetos de software e prospecção tecnológica.



