Ottimizzazioni per midlet - Java ME - parte 1

Suggerimenti per ottimizzare il codice java su ME

Di seguito ho raccolto una serie di consigli applicabili allo sviluppo di applicazioni su piattaforma java me. Tali pratiche spesso vanno contro i principi della buona programmazione object oriented ma nello stesso tempo permettono di ottenere ottimizzazioni sui dispositivi con risorse limitate.



Preferire sempre l'uso di array rispetto ai Vector.
Se è cmq necessario utilizzare strutture dinamiche costruirsi una classe ad hoc che incrementa il proprio spazio secondo la logica migliore per quel tipo di applicazione.

Preferire l'uso di char array rispetto alle stringhe.

Usare per le concatenazioni di stringhe lo StringBuffer e non l'operatore di concatenazione "+"


Sostituire le operazioni di moltiplicazione e divisione per operandi potenze di 2 con operazioni di shift
op1 >> op2 corrisponde a op1:2^op2
op1 << op2 corrisponde a op1*2^op2

Evitare quando possibile uso di metodi synchronized
Sono i piu’ lenti in assoluto causa del check sui monitors


Usare quando possibile tipi che richiedono meno memoria
Ad esempio usare "short" per valori sappiamo non supereranno 255

Evitare il più possibile blocchi try catch, se proprio necessari mantenerli all'esterno dei loop

Evitare l'uso di package.
Durante la fase di sviluppo magari avvalersi di tale possiblità ma eliminarla prima del rilascio finale dell'applicazione.


Quando possibile eliminare i loop a favore di codice ripetuto.
for (int i =0 ; i<10; i++) {..Faiqualcosa();.. } può essere sostituito per ridurre bytecode generato e aumentare le prestazioni in 10 chiamate a Faiqualcosa();

Nelle espressioni di confronto preferire il confronto con i valori: 0, null, false

Usare i blocchi switch rispetto ai blocchi if.

I primi infatti vengono tradotti nelle jump tables quando avviene la compilazione creando meno bytecode e migliorandone le performance.

Accedere alle variabili direttamente dichiarandole public.

Nonostante tale pratica non rispetti i principi della programmazione OO tale tecnica consente un accesso più veloce e snello rispetto ai metodi di incapsulamento ("get.. e set..").

Preferire variabili locali rispetto a campi della classe.

Usare le classi interne se le funzionalità di tale classe sono "vicine" alla classe "contenitore".

Settare a null i riferimenti ad oggetti non più utilizzati.

Dichiarare le costanti "final static".

Il compilatore inserirà il valore direttamente all'interno della classe stessa.Usando ad esempio proguard tale ottimizzazione viene cmq persa.






No comments: