Bonjour à tous,
Je voulais savoir s'il y avais des chausse-trappes et/ou des astuces particulières pour manipuler de gros tableaux en Java ? Je m'explique: je doit afficher des tableaux (avec un JTable) d'une taille d'environ 6400 x 20 Strings, ce qui prends quand même un peu de mémoire. Bien sûr, dès que j'en ouvre 5 ou 6... OutOfMemoryException =)

Donc, y'a-t'il des techniques particulières dont je n'aurais pas connaissance pour gérer ces données ? Pour le moment je ne vois que:
- empêcher l'utilisateur d'ouvrir trop de tableaux en même temps (en testant avec un Runtime.getRuntime().freeMemory() si la mémoire restante est suffisante pour ouvrir un tableau de plus
- sachant que les données sont récupérées dans une base SQL, est qu'au sein du driver (MySQL-connector), lors d'un executeQuery() les résultats sont stockés dans un grand Vector, peut-être que l'on peut réécrire le code pour avoir un accès direct à ce Vector ? Je dis ça par ce que pour le moment j'ai deux façon d'accéder à ces données:
- un Iterator modifié, qui me permet de récupérer ligne après ligne tout le tableau (en fait ca étend plus ou moins ce que fait ResultSet.next(), qui est lui-même un Iterator)
- une classe qui, à partir de cet Iterator, me crée un gros Object[][] où mes infos sont placées. C'est ce tableau que j'injecte dans le JTable. C'est peut-être pas la meilleure chose à faire ??
- enfin, je peux toujours lancer constamment le garbage collector... En espérant grapiller quelques octets en mémoire

Ce que je me demande c'est si c'est pertinant de garder en mémoire de gros Object[][]. Mais cela semble la seule chose que le JTable est capable d'ingurgiter (je le vois mal utiliser l'Iterator qui puise les données de la base SQL à la source).

Modifier les paramètres de la JVM pour lui autoriser plus de mémoire n'est pas possible pour mon cas; pouvez-vous me dire si je m'y prends mal ? Heureusement qu'en Java on ne travaille que par pointeurs... Sinon je n'ose pas imaginer la place mémoire que m'aurai pris ces tableaux, à force de les passer d'une classe à l'autre =)

Aurélien Mazurie

Répondre à