Tesi

Il lavoro di tesi tratta il confronto tra i linguaggi di programmazione lua e java dal punto di vista dei tempi di esecuzione e della memoria utilizzata.

Algoritmi Utilizzati

1. Hello world: stampa 1000 volte la stringa "Ciao mondo";
2. Attraversamento di array (tipi: int, double, float, ArrayList e Vector): crea ed attraversa un array di 1000 elementi;
3. Numeri di Fibonacci;
4. Accesso a file: legge due file di dimensioni 1.2 mega ciascuno e concatena le stringhe lette stampandole;
5. Classe Account: test di ereditarietà;
6. Whetstone: test di operazioni di tipo floating point;
7. Dhrystone: test di operazioni su stringhe;
8. Quicksort: algoritmo di ordinamento con chiamate ricorsive su un array di double di 100000 elementi;
9. Algoritmo di Dijkstra: cammino minimo su un grafo di 1000 vertici e altrettanti archi;

Conclusioni

Il confronto fra le due macchine virtuali è stato effettuato a parità di condizioni e sulla stessa macchina; sono stati utilizzati gli stessi algoritmi con la medesima implementazione. In generale si può osservare che Lua risulta meno lento nelle applicazioni in cui non sono presenti molte operazioni aritmetiche. Infatti, negli algoritmi Whetstone, Dhrystone e nell'algoritmo di Dijkstra, che contengono molte operazioni di questo tipo, Lua impiega un tempo superiore rispetto a quello impiegato da Java; mentre, in algoritmi come il Quicksort che contiene più confronti ed assegnazioni che operazioni aritmetiche o algebriche Lua risulta più performante. Per quanto riguarda le risorse di memoria, Lua in genere è in grado di eseguire l'applicazione con un impiego di risorse inferiore rispetto a Java. Osservando infatti i risultati degli algoritmi utilizzati si può notare che le risorse di memoria impiegate da Lua sono sempre inferiori a quelle impiegate da Java ad eccezione degli algoritmi Quicksort e Dijkstra. Le prove quindi hanno evidenziato una propensione per Lua all'ottimizzazione delle risorse di memoria. L'utilizzo del compilatore Just in time LuaJit ha migliorato le prestazioni di Lua, anche se ha ribaltato la situazione negli algoritmi più semplici introducendo un overhead per il bootstrap del compilatore Just in Time. Anche l'utilizzo delle risorse di memoria da parte di Lua sono aumentate utilizzando LuaJit restando, comunque, inferiori alle risorse impiegate da Java. LuaJit ha migliorato notevolmente i tempi di esecuzione degli algoritmi Whetstone, Dhrystone, Quicksort, Dijkstra, Fibonacci Ricorsivo, Accesso a File; i tempi di esecuzione in questi algoritmi in media si sono ridotti di un terzo. L'aumento dell'impiego delle risorse di memoria riscontrato utilizzando LuaJIT risulta maggiore negli algoritmi più complessi come il whestone, dhrystone, dijkstra e quicksort.

Seminari sostenuti

23-11-2007 - Panoramica del linguaggio di programmazione Lua
07-03-2008 - Lua vs Java
27-06-2008 - Benchmark: Lua, Java e LuaJIT

Bibliografia

Lua
Sito ufficiale Lua
Wiki Lua
LuaJIT
The Benchmark Game
Netlib
Java Doc