Bonjour,

J'ai le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

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:

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 :
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