2010-12-03 30 views
3

J'ai un problème Litle grand avec mémoire de tas java je suis en train de migrer la base de données Oracle 11g pour accéder au fichier 2007Java Heap Space Exception, avec un grand nombre de données, une solution?

Ce n'est pas un problème ci-dessous 65.000 dossiers, maintenant à partir de là ... Le aplication est jeter l'exception de tas java, la consommation de mémoire est soulevant plus de 600m et l'utilisation du processeur de plus de 50% jusqu'à l'exeption.

Pour autant que je sais que la rset.next() ne reçoivent pas toutes les données (plus de 50 x 65000 colums ligne), mais certains enregistrements x temps je l'ai essayer de définir la taille trop chercher, rien ne se passait

rset.setFetchSize(1000); 

j'ai effacer mon code et affiche une sortie, même erreur

while (rset.next()) { 
if (cont % 5000 == 0) { 
    System.out.println(cont + " proccesed and counting ..."); 
} 
} 

s'il vous plaît ne me donne pas la réponse de l'utilisation -XM (s, x) 512, 1024, etc .. cela pourrait être résolu, pas dans mon cas particulier (j'ai essayé de mettre ce xD encore plus haut, rien ne se passe, je a eu la même exception à 65.000 enregistrements aussi)

Existe-t-il d'autres options que je pourrais essayer ??, en changeant quelques configurations de conducteur ou conections de corde ?? s'il vous plaît aider

désolé aboubt mon anglais

ceci est ma connexion:

Class.forName("oracle.jdbc.driver.OracleDriver"); 
this.conn = DriverManager.getConnection("jdbc:oracle:thin:@" + getServer() + ":1521:orcl", getUser(), getPassword()); 
       this.stmt = this.conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE, java.sql.ResultSet.CONCUR_UPDATABLE); 
+2

pouvons-nous voir votre message d'erreur? – OscarRyz

+0

yes wait a moment – ErVeY

+0

Que fait le tag MS-ACCESS sur cette question? Je ne vois rien à propos d'Access ou du moteur de base de données Jet/ACE. –

Répondre

2

Il semble que le problème est que vous utilisez un ResultSet et Scrollable qui va utiliser plus de mémoire.

+0

mmmmmmmmmmmmmm que diriez-vous ??? je pourrais utiliser un autre type de resultset ??? – ErVeY

+3

@ErVeY: vous devez utiliser 'TYPE_FORWARD_ONLY' au lieu de' TYPE_SCROLL_INSENSITIVE' si vous traitez le jeu de résultats ligne par ligne. Je pense que l'implémentation de 'TYPE_SCROLL_INSENSITIVE' est de mettre en cache les lignes à mesure qu'elles sont récupérées, entraînant le débordement de la mémoire (puisque tous les curseurs Oracle sont uniquement du côté base de données, le client doit implémenter la fonction scrollable via le cache côté client) –

+0

Thx Vincent je vais essayer, j'ai été déconnecté du monde depuis que j'ai fait cette question, donc je ne pouvais pas suivre les theards, désolé à ce sujet – ErVeY