Dans mon programme, je lis une série de fichiers texte à partir du disque. Avec chaque fichier texte, je traite certaines données et stocke les résultats sous forme de JSON sur le disque. Dans ce design, chaque fichier a son propre fichier JSON. En plus de cela, je stocke également certaines des données dans un fichier JSON séparé, qui stocke les données pertinentes à partir de plusieurs fichiers. Mon problème est que le JSON partagé devient de plus en plus grand avec chaque fichier analysé, et utilise par la suite trop de mémoire. Je suis sur une machine 32 bits et j'ai 4 Go de RAM, et je ne peux plus augmenter la taille de la mémoire de la machine virtuelle Java.Mes fichiers JSON sont trop gros pour tenir dans la mémoire, que puis-je faire?
Une autre contrainte à considérer est que je me réfère souvent à l'ancien JSON. Par exemple, disons que je sors ObjX de FileY. Dans le code pseudo, ce qui suit arrive (en utilisant Jackson pour la sérialisation JSON/désérialisation):
// In the main method.
FileYJSON = parse(FileY);
ObjX = FileYJSON.get(some_key);
sharedJSON.add(ObjX);
// In sharedJSON object
List objList;
function add(obj)
if (!objList.contains(obj))
objList.add(obj);
La seule chose que je peux penser à faire est d'utiliser le streaming JSON, mais le problème est que je dois souvent pour accéder au JSON est venu avant, donc je ne sais pas ce flux va fonctionner. Aussi mes types de données sur les chaînes non seulement, ce qui m'empêche d'utiliser les capacités de streaming de Jackson (je crois). Est-ce que quelqu'un sait d'une bonne solution?
Il est peut-être temps de repenser votre structure de données. Trouver un meilleur design (plus modulaire) pourrait faciliter les exigences de la machine. – SJuan76
Obtenez plus de mémoire ou des fichiers plus petits. – duffymo
Si vous stockez toutes vos données en mémoire, le streaming ne vous fera gagner qu'un peu plus de temps. Trouvez des façons de vider ce dont vous n'avez plus besoin. – phatfingers