DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL
ou 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.

Esse artigo faz parte da revista Java Magazine edição 35. Clique aqui para ler todos os artigos desta edição

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-a-dia de todos os desenvolvedores Java, é comum trabalharmos com códigos que apresentam necessidades de alto desempenho, sem que existam opções da JVM ou APIs especiais à disposição para ajudar. Nestes casos, devemos utilizar técnicas mais gerais de otimização de algoritmos. São técnicas que precedem o Java em décadas, mas a cada nova geração de tecnologias, linguagens e programadores, elas devem ser continuamente lembradas e adaptadas.

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 em código Java escrito sem suficiente cuidado com questões de desempenho computacional[2]. Mas estes exemplos somente ilustram princípios sistêmicos que se aplicam a qualquer linguagem ou ambiente de programação.

 

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-otimizada pode já ser um código "maduro".

·         É 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.

 

"

A exibição deste artigo foi interrompida.

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL
ou 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.
O que você achou deste post?

    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03