Différence allocation Mémoire entre JDK5 et (JD6 et ultérieur)
Bonjour
Auriez-vous une explication sur ce comportement?
Je créé une boucle infini jusqu'à saturation de la mémoire.
Or cette saturation n'arrive pas au même moment selon la version du jdk utilisée...
le code tout simple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
Map<Integer, int[][]> mapInt = new HashMap<Integer, int[][]>();
int tailleTableauX = 500;
try {
for (int i = 0; i < 10000; i++) {
mapInt.put(i,new int[tailleTableauX][1000]);
}
} catch (OutOfMemoryError e) {
System.out.println("Sortie OutOfMemory error Test (Map de tableau de taille " + tailleTableauX + "x1000) à l'index : " + i );
} finally {
mapInt = null;
} |
Or si je compile ('javac *.java') et exécute('java -classpath . -Xmx2000m Test') en jdk5 , je sors à un certain index.
Si je compile et exécute en JDK6 ou 7, je sors à un index inférieur. Donc moins d'objets créés.
Il y a une différence d'à peu près 20% du nombre d'objets alloués, quelle que soit la taille du tas (valeurs comprises entre 100m et 2600m)
Avez-vous une explication?
Merci
PS: les versions des jdk sont des versions 32 bits tournant sous linux
jdk-1_5_0_17-linux-i586
jdk-6u45-linux-i586
jdk-7u45-linux-i586