Optimizando aplicaciones J2ME (II) – Creación de objetos
Escrito por blogElectronica en 4.PROGRAMACIÓNEl otro día empecé unos capítulos de optimización de aplicaciones J2ME para nuestros módems gprs Siemens / Cinterion TC65 / XT65. Hoy voy con otra entrega que sigue el hilo al anterior, en lo referente a memoria y se trata de la creación de objetos.
En un lenguaje orientado a objetos como es el java en ocasiones tenemos tendencia a crear y utilizar más objetos de los que son realmente necesarios. Como dije anteriormente, en un PC de sobremesa no tiene mayor importancia, pero en un módulo embebido sí que lo tiene. Debemos intentar evitar crear objetos innecesarios, pues cada uno de estos objetos necesitan memoria y su creación además consume un precioso tiempo de CPU.
Además, cuantos más objetos creamos, mayor es la frecuencia en la que el Garbage Collector entrará en acción, lo que se traduce en una bajada de rendimiento de nuestras aplicaciones, pues es como tener otro thread funcionando en background.
Veamos un ejemplo.
MyObject [] input = MyObject.getArray();
for (int i=0; i < input.length;i++)
{
Processor p = new Processor(input[i]);
System.out.println(p.process());
}
En el fragmento de código anterior se crea una instancia del objeto Processor en cada bucle del for. Al finalizar el bucle for, es decir, al final de cada iteración tenemos una parte de la memoria llena por un objeto (una nueva instancia de Processos) al cual no se le va a hacer referencia en ninguna parte más del programa, lo que va a causar pérdida de memoria disponible y que el garbage collector trabaje más de la cuenta con la consiguiente pérdida de recursos y rendimiento de nuestra aplicación.
Una manera más adecuada para realizar la tarea anterior sería algo como:
MyObject [] input = MyObject.getArray();
Processor p = new Processor();
for (int i=0; i < input.length;i++)
{
p.setInput(input[i]);
System.out.println(p.process());
}
De esta manera creamos únicamente una instancia del objeto antes del bucle for. Basta luego con que creemos un método con que pasarle el argumento, en lugar de pasárselo al constructor de la clase como se hacía antes.
Lo anterior es un ejemplo muy básico, pero sirve para ver una situación típica en la que debemos tener cuidado a la hora de programar.
Bueno, otro día más. También dentro de poco intentaré poner un poco de orden en los posts, especialmente de lo que más hablo de Siemens / Cinterion. Pondré un post que iré actualizando periódicamente ordenando las entradas, con un resumen de cada post y bien estructurado, que sea fácil de encontrar la información. Hoy, por primera vez, blogElectronica supera las 8.000 visitas / mes.
Post relacionados:
- Optimizando aplicaciones J2ME (I) – Memoria No es lo mismo realizar aplicaciones para un Core 2...
- Usar un ofuscador con j2ME. Proguard. Hoy voy a poner un pequeño post sobre Proguard, un...
- Compresión de archivos con J2ME en módems GPRS Siemens TC65 En muchas aplicaciones con módems GPRS es necesario almacenar datos...
Etiquetas: j2me, java
Muchas gracias por la info… Este truco esta excelente…
Salu2 y gracias por compartir