[JVM]Gestion mémoire : Bizarre
Bonjour,
J'ai le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
// - Record 100 date
for (int l = 0; l < 10; l++) {
System.out.println("Evolution=" + l);
System.out.println("Memory before = "
+ Runtime.getRuntime().totalMemory());
calendar.set(2005, month++, 1, 0, 0, 0);
d0 = calendar.getTime();
// - Création d'un tableau 3D de double
double tmp0[][][] = new double[ni][nj][nk];
for (int k = 0; k < nk; k++) {
for (int j = 0; j < nj; j++) {
for (int i = 0; i < ni; i++) {
tmp0[j][i][k] = 5 * k + Math.random() * 2;
}
}
}
System.out.println("Memory after = "
+ Runtime.getRuntime().totalMemory());
// - Création du BDouble3D
BDouble3D bd3d0 = new BDouble3D(tmp0);
pressure.put(new Double(d0.getTime() / 1000), bd3d0);
System.out.println("Memory after = "
+ Runtime.getRuntime().totalMemory());
} |
Qui me donne en sortie :
Citation:
Evolution=0
Memory before = 90095616
Memory after = 159727616
Memory after = 159727616
Evolution=1
Memory before = 159727616
Memory after = 282619904
Memory after = 282619904
Evolution=2
Memory before = 282619904
Memory after = 282619904
Memory after = 282619904
Evolution=3
Memory before = 282619904
Memory after = 499564544
Memory after = 499564544
Evolution=4
Memory before = 499564544
Memory after = 499564544
Memory after = 499564544
Evolution=5
Memory before = 499564544
Memory after = 499564544
Memory after = 499564544
Evolution=6
Memory before = 499564544
Memory after = 881041408
Memory after = 881041408
Evolution=7
Memory before = 881041408
Memory after = 881041408
Memory after = 881041408
Evolution=8
Memory before = 881041408
Memory after = 881041408
Memory after = 881041408
Evolution=9
Memory before = 881041408
Memory after = 881041408
Memory after = 881041408
Populate optim : done!
Memory after = 881041408
Si l'on considère la ligne suivante qui corespond normalement à la taille de ma matrice:
Citation:
Evolution=0
Memory before = 90095616
Memory after = 159727616
J'ai donc une matrice égale à 159727616 - 90095616 = 69632000 bytes, soit 69632000 / 1024 = 68000 Moctets
sachant que ma matrice fait 8 000 000 de cellules double , je devrais avoir ( 8 000 000 * 8 octets ) / 1024 = 62500 Mo , pour quoi cette différence ?
De plus il y a des traces comme :
Citation:
Evolution=7
Memory before = 881041408
Memory after = 881041408
Memory after = 881041408
Pourquoi entre before et after il n'y a pas de différence alors qu'une matrice de 8 000 000 de cellules doubles vient d'être créée ? La mémoire se vide t'elle au même moment ?
Merci d'avance pour vos éclaircissements