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
| // On crée notre cache, qui pour un int 'n' renvoit un objet de 'n' Mb
Cache<Integer, Object> cache = new Cache<Integer, Object>() {
@Override
protected Object doLoad(final Integer n) {
// Crée un tableau de 'n' Mb
return new byte[n*1024*1024];
}
};
// On récupère le MemoryMXBean qui permet d'afficher
MemoryMXBean memory = ManagementFactory.getMemoryMXBean();
System.out.println(memory.getHeapMemoryUsage());
System.out.println();
// On conserve une référence forte pour n==8 (il restera dans la Map)
Object n8 = cache.load(8);
// On tente de récupérer chacune des valeurs suivantes
int[] values = { 10, 5, 10, 8, 30, 5, 10, 15, 30, 8, 30, 5, 10, 5, 30, 5, 10, 8 };
for (int n : values) {
// Pour chaque valeur, on affiche les valeurs renvoyé par get() et load() :
System.out.printf("Pour n = %d (present=%s) (load=%s)%n",
n, cache.get(n), cache.load(n));
System.out.println(memory.getHeapMemoryUsage());
System.out.println();
} |
Partager