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:
Or si je compile ('javac *.java') et exécute('java -classpath . -Xmx2000m Test') en jdk5 , je sors à un certain index.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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
Partager