Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Otimização de Código - JavaME

From Wiki
Jump to: navigation, search
Article Metadata

Artigo
Tradução:
Por thiagobrunoms
Última alteração feita por hamishwillee em 29 Jul 2013

Uma vez que os dispositivos têm memória heap pequena, restrições sobre os tamanhos dos arquivos .jar e CPUs com baixo poder de processamento, as otimizações podem ser empregadas para melhorar o desempenho das aplicações Java ME.

Contents

Dicas de otimização

Abaixo encontra-se um resumo de técnicas de otimização de código que pode ser bastante útil para reduzir o tamanho do dos arquivos .jar e do uso de memória.

  1. Use o mecanismo de ofuscação de código como as ferramentas livres Proguard ou Retroguard. Eles podem remover o código desnecessário e executar outras otimizações para diminuir o tamanho da MIDlet (tamanho do arquivo JAR).
  2. Use o número mínimo de classes, até mesmo as classes vazias ocupam espaços
  3. Evite a criação de objetos desnecessários.
  4. Faça a reutilização de objetos, quando possível.
  5. Para economizar memória, marque os objetos não usados explicitamente através da referência null.
  6. Cuidado com as chamadas explícitas ao coletor de lixos (Garbage Collector). Chamando System.gc pode causar lentidão em alguns dispositivos e é uma declaração de bloqueio.
  7. Use uma quantidade mínima de imagens no aplicativo para economizar espaço.
  8. Se não estiver usando uma ferramenta de ofuscação de código, certifique-se de que:
    1. Todas as variáveis, método e nome da classe devem ser pequenas.
    2. Remova qualquer código indesejado.
    3. A estrutura do pacote deve ser o mínimo possível, se possível, evite os pacotes.
  9. Evite criar muitas tarefas e reuse objetos do tipo Thread quando possível.

Evitando a alocação desnecessária de objetos

Para evitar a alocação desnecessária de objetos, defina suas classes de tal forma que o reuso possa acontecer. Evite criar tipos de objetos que não permitam a modificação posterior do seu conteúdo, como Strings. Isto sempre força a criação de uma nova instância da classe quando o objeto é modificado. A meta é minimizar a alocação de memória através do reuso de objetos que já tenham sido criados.

Por exemplo, dê uma olhada no código a seguir. Imagine a adição e posterior impressão de dois valores do tipo "int" (armazenados em uma variável int[]). O primeiro laço "for" deixa claro como "NÃO" reusar objetos. Já o segundo demonstra como este código pode ser otimizado.

public class MyObject {
public int plus(int a, int b) {
return a+b;
}
}
 
//Sem reusar objetos
int[] values = new int[]{... ... ..};
for (int i=0; ... ...) {
obj = new MyObject();
int value = obj.plus(i, i+1);
System.out.println(value);
}
 
//Reusando objetos
int[] values = new int[]{... ... ..};
obj = new MyObject();
int value;
for (int i=0; ... ...) {
value = obj.plus(i, i+1);
System.out.println(value);
}

Aloque memória quando necessário (alocação tardia ou "preguiçosa")

Neste ponto, a ideia é evitar a criação de objetos ou variáveis se durante a execução do código este objeto ou variável não é usada.

public class MyObject {
private Image photo;
 
public Image getPhoto(String file) {
if(photo == null)
photo = Image.createImage(file); //Cria o objeto somente quando necessário
 
return photo;
}
}

Padrão de projeto com Singleton

O padrão de projeto conhecido como singleton pode ser uma característica importante para otimizar seu código, evitando a criação desnecessária de objetos. Classes que tratam requerimentos como mensagens de log, configurações, persistência, entre outros, são bons candidatos para se tornarem singleton.

Definição de laços

Seja cuidadoso ao definir as iterações dos laços com "while" ou "for". O seguinte exemplo mostra como "NÃO" construir seus laços, consumindo o tempo do processador.

//array.size() será chamado a cada iteração, de i=0 a size.
for (int i=0; i<array.size(); i++) {
...
}
 
//De outra forma, mantendo o comprimento do objeto array numa variável e usando-a
int size = array.size();
for (int i=0; i<size; i++) {
...
}
This page was last modified on 29 July 2013, at 06:26.
200 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×