Gérer beaucoup de données et pool mémoire
Hello,
J'écris actuellement une appli de visualisation de données astronomiques qui représentent de gros volumes de données. Il s'agit d'une image radar de résolution 432000x144000 découpée en sous images de 1200x1200 (39Go de données au total). Le but est de pouvoir voir l'image dans son ensemble, et zoomer sur une zone librement.
L'interface de Google Maps est à peu près ce à quoi je veux aboutir.
Voilà le problème exposé, maintenant j'ai 2 problèmes de design et 2 questions :
1) J'ai choisi de charger chaque chunk de 1200x1200 en mémoire au besoin, en les gardant en mémoire. Comment savoir si je vais avoir assez de mémoire pour ajouter un nouvel objet dans mon pool mémoire ? Je peux catcher OutOfMemoryError, mais je crois que la JVM est dans un piteux état si j'en arrive là. Comment calculer la taille nécessaire à la création d'un objet ?
2) Vu le volume je ne peux pas tout charger en RAM. Pour afficher l'image, j'ai besoin de charger chaque zone 1200x1200 dans le champ de vision, de les zoomer au niveau voulu, et de les afficher correctement. Problème, à chaque déplacement ou zoom, je dois potentiellement recharger 39Go de données. Donc je vais devoir là aussi mettre en cache les images obtenues pour différents niveau de zoom. Pensez-vous que c'est faisable en dynamique, ou bien est-ce qu'il faudrait mieux que je génère des images pour chaque niveau de zoom sur le disque à l'avance ? (Principe utilisé par Google Maps)
Bon, voilà, j'ai un peu jeté mes idées dans ce post, comme j'ai dit je suis en phase de design. Merci de m'aider et m'indiquer si je fais fausse route :-)