Java heap space Exception java.lang.OutOfMemoryError
Je suis l'élaboration d'une détection de plagiat de l'application, ce qui implique beaucoup de traitement de documents. Pour l'indexation des documents, je suis à l'aide d'Apache Lucene et je suis en utilisant Apache solr comme un serveur de documents. Je suis à l'aide de Jasper rapports, un module de reporting. Après le traitement de tous les documents et de détection de plagiat, je suis à l'appel d'une interface développée à l'aide de Jasper reporting et à l'époque java heap space exception s'est produite. J'ai essayé d'augmenter la mémoire dans l'application, mais la même exception est encore jetés. Est-il une suggestion pour m'aider à résoudre ce problème.
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
at java.util.ArrayList.add(ArrayList.java:351)
at reportingModule.PeerSearchUI.generateResults(PeerSearchUI.java:901)
at reportingModule.PeerSearchUI.setResultDetails(PeerSearchUI.java:833)
at gui.form.WizardForm.ViewButtonActionPerformed(WizardForm.java:1372)
at gui.form.WizardForm.access$1200(WizardForm.java:50)
at gui.form.WizardForm$13.actionPerformed(WizardForm.java:870)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
Couper la quantité de mémoire que vous utilisez? Je ne suis pas sûr de ce que d'autre à dire compte tenu de l'information. Pourrions-nous avoir plus de détails quant à la façon dont votre code fonctionne? Pourrait-on avoir un peu de code?
Merci pour la réponse. Ya, elle a eu lieu dans le même endroit. Mon ordinateur portable est doté d'une mémoire de 2 go, mais alors que l'application est exécutée, elle est à l'aide de seulement environ 800 mo, y compris toutes les autres applications.
Pouvez-vous coller à l'exception de trace? il pourrait avoir plus de détails au début de la zone de tas d'objets est en cours d'exécution.
J'ai ajouté une réponse vous suggère d'augmenter votre maximum d'espace de tas, mais j'ai lu que vous avez déjà essayé. Juste pour être sûr, vous avez changé le Xmx drapeau correct?
OriginalL'auteur KasunKP | 2011-08-22
Vous devez vous connecter pour publier un commentaire.
De votre exception, l'erreur est liée à des tas (pas permgen ou de tout autre aménagement des espaces) de sorte que le seul paramètre de réglage sera -Xmx et voici donc mes suggestions :
Ont la machine à utiliser plus de mémoire à l'aide de l'-Xmx - essayez 1G :
-Xmx1024m
Si cela finit par jeter le même message d'erreur,
un heap dump lorsque le programme va dans le OOM.
analyser le heap dump obtenu. Qui contribuera à l'identification de la mémoire
les fuites.
Autre que cela, il n'existe pas de solution générique pour fixer
java.lang.OutOfMemoryError: Java heap space
- Il peut être très spécifique à l'application.OriginalL'auteur ring bearer
Il aiderait si vous pouviez nous dire quels sont les types de variables que vous utilisez pour stocker l'index du document et les résultats déclarés.
Essayez d'exécuter l'application de reporting dans une autre JVM de l'indexation de document de processus.
D'indexation des documents est gourmande en ressources opération et s'il tient toute la mémoire utilisée lors de l'indexation et puis vous essayez d'interroger l'index de votre rapport, il peut consommer encore plus.
Regardons la trace de la pile à partir du haut. Les trois premières lignes (lire dans l'ordre inverse) montrent à l'arme.
La JVM
La trace de la pile ne mentionne pas l'exacte tableau, mais il doit être un grand.
Question: Comment êtes-vous le stockage de l'achevé d'index et où en êtes-vous de mettre les résultats du rapport? Puisque vous n'avez pas dit ce que la structure, je vais supposer pour le moment d'un Vecteur qui est pratique à utiliser lorsque vous ne savez pas quelle quantité de données que vous avez, mais est également très inutile lorsque sa capacité est augmentée. Si pas dit le contraire, il double de taille chaque fois qu'il a besoin de plus d'espace pour une taille initiale de 100 octets peuvent rapidement se transformer en dizaines de méga-octets dont près de la moitié de la nouvelle salle vide.
Les deux lignes suivantes sont à partir de votre code de signalement. Je suppose que le module de reporting partie de l'INTERFACE utilisateur a une référence à la matrice/vecteur/liste étant rempli avec des données. Dites-nous de quel type il est.
La ligne ci-dessous implique l'exception se produit après que vous avez cliqué sur un bouton "Afficher les Résultats" peut-être, qui débute un rapport.
Cela implique que les résultats sont disponibles et sont en attente d'être affiché. Si cela est vrai, alors vous devez avoir un meilleur moyen d'isoler les résultats.
Comment montrer seulement 1 page de résultats à la fois. Afficher uniquement les 10 premières lignes, puis cliquez sur afficher les 10 prochaines, etc.
OriginalL'auteur Kelly S. French