2. J2ME
Tópicos
•
•
•
Otimização
Porque otimizar?
O que fazer para otimizar?
• Tipos de otimização
• Práticas de otimização
3. J2ME
Otimização
No ambiente computacional, aplicar técnicas de
otimização é uma tarefa de extrema importância e
relevância. Quando estamos falando de um
ambiente para dispositivos móveis, torna-se
fundamental otimizar.
4. J2ME
Porque otimizar?
• Limitações do hardware (processamento,
armazenamento, memória, ...)
• Tamanho da aplicação final.
– Em determinados dispositivos, o tamanho máximo de uma
aplicação JME não pode ultrapassar certa quantidade de
kilobytes.
– Espaço de armazenamento é escasso. Quanto menor o
tamanho, maior o número de aplicações instaladas.
• Custo de telefonia.
– Quanto mais rápido e quanto menos bytes forem
enviados/recebidos, mais barato sai o custo da conexão.
– Ao baixar uma aplicação, quanto menor, menor o custo e
menos tempo de espera.
• Pequenas mudanças podem trazer benefícios
consideráveis.
5. J2ME
Porque otimizar?
CUIDADO! Porque otimizar se nem testado foi? Porque
otimizar se aplicação atende às necessidades do
usuário? Tempo é muito valioso nos dias de hoje.
• Martin J. Hells em “J2ME Game Programming”
– “Não tente otimizar código que você pensa que é
lento, otimize aquilo que você sabe que é lento”.
6. J2ME
O que fazer para otimizar?
• Aplicar práticas para melhorar a performance e a
aplicação de uma maneira geral.
• Diminuir o tamanho do código-fonte, do aplicativo
como um todo e das imagens PNG.
• Usar Obfuscators
– O objetivo principal de obfuscation é dificultar a
engenharia reversa do código Java™.
– Obfuscators também reduzem o tamanho do código-
fonte, “renomeando” identificadores e assinaturas de
métodos.
7. J2ME
Tipos de otimização
• Otimização de alto nível
– Foco seria o desenho do código-fonte e seus
algoritmos.
– Dentre as possíveis soluções, a melhor em custo X
benefício.
– Algoritmo correto = solução adequada
• Otimização de baixo nível
– Atenção direcionada para pequenos trechos de código
(às vezes, algumas linhas de código).
– Maioria das vezes a atenção é voltada para o que
pode ser melhorado na implementação de métodos,
na sua declaração e nos seus parâmetros de entrada.
8. J2ME
Práticas de otimização (1/9)
• Evitar heranças principalmente as muito
profundas (classe que herda de classe que herda
de classe etc.)
– Classes derivadas tem que gastar tempo e espaço
com dados herdados mesmo que sem usá-los
– Um método quando não encontrado é procurado na
hierarquia de classes o que gasta tempo e
processamento
– Caso a subclasse não use muito dos métodos e dados
da superclasse, analise se não é possível criar uma
nova classe
9. J2ME
Práticas de otimização (2/9)
• Evitar inner classes (classes aninhadas) e classes
que realmente sejam desnecessárias.
– Com inner classes, o compilador inclui código extra
para permitir a classe aninhada acessar os dados
privados da classe de fora.
10. J2ME
Práticas de otimização (3/9)
• Minimizar criação de objetos.
– Consome memória
– Rouba ciclos de processamento
– Leva a coleta de lixo, o que rouba mais ciclos
• Evitar criação de objetos dentro de métodos.
– Se possível, passe o objeto como parâmetro.
11. J2ME
Práticas de otimização (4/9)
• Evitar concatenações de Strings
• Usar StringBuffer
– Fácil de usar e destruir.
– Menos consumo de memória.
– Realocação pode ser evitada criando um StringBuffer
com tamanho de buffer adequado a aplicação.
12. J2ME
Práticas de otimização (5/9)
• Evitar gets() e sets(). Atributos dos objetos
poderiam ser public.
– Desnecessariamente, a aplicação fica mais lenta e código-
fonte fica maior.