Manipulation de gros tableaux
Aurelien Mazurie
Thu, 28 Nov 2002 13:29:52 -0800
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