P4a : Analyse de performances de différentes structures
Problème
Description du problème :
Dans un code java, nous pouvons utiliser plusieurs types de liste mais nous ne savons pas quelle structure est la plus performante (temps d'excutione et consommation mémoire). Nous allons donc analyser les comportements de différentes structures :
- ArrayList
- LinkedList
- Vector
Pour différentes opérations :
- Add
- Contains
- Remove
Et avec différents paramètres de test :
- Le type de la structure (ArrayList, LinkedList, Vector)
- Le nombre de tests (5 ou plus)
- Le nombre d'éléments (100000, 1000000, 10000000)
Dispositif expérimental
Application
Description de l'application et des arguments
Ce code Java prend 3 arguments en entrées :
- le type de la structure à utiliser (arraylist, linkedlist ou vector)
- le type de la commande (add, acces ou supprimer)
- le nombre d'éléments à ajouter, supprimer ou accéder
Environnement de test
Description de la plateforme de test
Extrait pertinent de /proc/cpuinfo
processor : 31
vendor_id : GenuineIntel
cpu family : 6
model : 63
model name : Intel(R) Xeon(R) CPU E5-2630L v3 @ 1.80GHz
stepping : 2
microcode : 0x31
cpu MHz : 1198.504
cache size : 20480 KB
Description de la démarche systématique
Description de la démarche systématique et de l'espace d'exploration pour chaque paramètres.
Nous commencons par la génération des fichier .dat qui seront utilisés pour générer les fichiers png(plots).
La commande : ./test.sh type_List opération taille | tee
Suite des commandes, ou script, à exécuter pour produire les données.
#!/bin/bash
type1=1 # ArrayList
type2=2 # LinkedList
type3=3 # Vector
op1=1 # add
op2=2 # contains
op3=3 # remove
size="1000 10000 100000"
nbTest=5
echo "taille\tiTest\tTempsDexecution\trealtime\tMemoire"
javac Main.java # générer le fichier .class
commande="java Main"
struct=$1
op=$2
res=""
for iSize in $size
do
for iTest in `seq 1 $nbTest`
do
res="$iSize\t$iTest\t"
res="$res`( /usr/bin/time -f "%U\t%e\t%M" $commande $struct $op $iSize > /dev/null ) 2>&1`"
echo "$res"
done
done
Résultats préalables
Temps d'exécution
Opération | ArrayList | LinkedList | Vector |
---|---|---|---|
add | ![]() |
![]() |
![]() |
contains | ![]() |
![]() |
![]() |
delete | ![]() |
![]() |
![]() |
Consommation mémoire
Opération | ArrayList | LinkedList | Vector |
---|---|---|---|
add | ![]() |
![]() |
![]() |
contains | ![]() |
![]() |
![]() |
delete | ![]() |
![]() |
![]() |
Analyse des résultats préalables
La mémoire se comporte exactement pareil sur les 4 versions. Les temps d'exécutions dépendent essentiellement de l'affichage des valeurs du tableau. La version 2 de recherche semble un peu plus rapide.
Discussion des résultats préalables
Explications précises et succinctes sur ce que les limites des résultats préalables et ce qu'ils ne permettent pas de vérifier.
Etude approfondie
Hypothèse
Expression précise et succincte d'une hypothèse.
Protocole expérimental de vérification de l'hypothèse
Expression précise et succincte du protocole.
Suite des commandes, ou script, à exécuter pour produire les données.