Bonjour,
J'ai le code suivant :
Qui me donne en sortie :
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()); }
Si l'on considère la ligne suivante qui corespond normalement à la taille de ma matrice: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
J'ai donc une matrice égale à 159727616 - 90095616 = 69632000 bytes, soit 69632000 / 1024 = 68000 MoctetsEvolution=0
Memory before = 90095616
Memory after = 159727616
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 :
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 ?Evolution=7
Memory before = 881041408
Memory after = 881041408
Memory after = 881041408
Merci d'avance pour vos éclaircissements
Partager