Bonjour,
Voila, j'ai besoin de mettre en place une gestion personnalisée du cache d'une application java. Je tiens à préciser que je ne suis pas très bon dans ce langage.
Pour le moment, ce qu'il se passe c'est que j'ai des objet (type article à afficher dans mon appli) et ceux-ci remplissent la mémoire cache du pc jusqu'a utiliser plus de 1.5 go de ram. Ce n'est évidemment pas acceptable. C'est pourquoi je me suis renseigné sur le sujet et j'ai pu trouvé une solution qui me semble honnete : LRU cache qui consiste à supprimer du cache les objets les plus vieux (comme pour une liste FIFO) dès lors que qu'une taille limite du cache est atteinte.
voici la classe que j'ai trouvé sur internet.
Voila où je bloque. En effet, comment mettre concrètement en place ce système de cache ? Dès lors que j'instancie mon objet Article, celui va se mettre en cache, on est d'accord. Du coup j'aimerai l'intercepter au moment de son instanciation afin de savoir si je dois laisser de la place dans le cache, enfin j'imagine ... Pour le moment l'application met en cache de manière transparante les objets ainsi instanciés. J'ai besoin de rendre visible cette procédure de mise en cache via une surcharge de la mise en cache. J'espère être à peu pret clair ...
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 import java.util.*; public class LRUCache { private static final int MAX_SIZE = 1; private Map[] backend; private int size = 0; public LRUCache(int n) { backend = new Map[n]; for (int i = 0; i < n; i ++) backend[i] = new HashMap(); } public int size() { return size; } public Object get(Object key) { for (Map m : backend) { if (m.containsKey(key)) return m.get(key); } return null; } public Object put(Object key, Object value) { if (backend[0].containsKey(key)) return backend[0].put(key, value); int n = backend.length; for (int i = 1; i < n; i ++) { Map m = backend[i]; if (m.containsKey(key)) { Object old = m.remove(key); backend[0].put(key, value); return old; } } backend[0].put(key, value); size ++; while (size > MAX_SIZE) { size -= backend[n - 1].size(); System.arraycopy(backend, 0, backend, 1, n - 1); backend[0] = new HashMap(); } return null; } }
Quelqu'un serait m'aider dans cette tache ?? mon cerveau n'en peut plus ...
Merci d'avance
Partager