chaos686 Δημοσ. 15 Δεκεμβρίου 2011 Δημοσ. 15 Δεκεμβρίου 2011 Καλησπέρα, έχω έναν φάκελο μεγέθους 184,1MB με txt αρχεία όπου ύστερα από επεξεργασία καθενός από αυτά παίρνω ένα τμήμα τους και το κάνω add σε ένα arraylist από string.Ενώ μέχρι κάποιο σημείο γίνεται κανονικά add στη λίστα μετά μου πετάει: >Exception in thread "main" java.lang.OutOfMemoryError: Java heap space Το πρόγραμμα το τρέχω σε netbeans και εχω θέσει -Xms512m -Xmx1024m (!). Ξέρει κανείς τι γίνεται;
bnvdarklord Δημοσ. 15 Δεκεμβρίου 2011 Δημοσ. 15 Δεκεμβρίου 2011 Για δες πως παει η RAM που καταναλώνει το πρόγραμμα οσο τρέχει.
chaos686 Δημοσ. 15 Δεκεμβρίου 2011 Μέλος Δημοσ. 15 Δεκεμβρίου 2011 Οριακά δεν μου την καταναλώνει όλη δηλαδή τη στιγμή που μου πετάει το error από total 2052996k είμαι γύρω στα 2000000k(-). Το πρόγραμμα το τρέχω σε netbook..
nexuss Δημοσ. 16 Δεκεμβρίου 2011 Δημοσ. 16 Δεκεμβρίου 2011 Έχεις τσεκάρει μήπως στον αλγόριθμό σου υπάρχει κάποιο memory leak;
kalogeros Δημοσ. 16 Δεκεμβρίου 2011 Δημοσ. 16 Δεκεμβρίου 2011 Γιατί δεν χρησιμοποιείς ένα try catch statement για να κάνεις χειρισμό της εξαίρεσης;
nexuss Δημοσ. 16 Δεκεμβρίου 2011 Δημοσ. 16 Δεκεμβρίου 2011 Είναι Error, δεν είναι Exception και τα Errors καλό είναι να μην τα βάζεις σε try catch.
chaos686 Δημοσ. 16 Δεκεμβρίου 2011 Μέλος Δημοσ. 16 Δεκεμβρίου 2011 Έχεις τσεκάρει μήπως στον αλγόριθμό σου υπάρχει κάποιο memory leak; Εννοείς να χρησημοποιήσω κάποιο εργαλείο;Αν ναι ποιό; Τα ίδια απότελεσματα έχω και σε pc με 4gb ram..
GKNSB Δημοσ. 16 Δεκεμβρίου 2011 Δημοσ. 16 Δεκεμβρίου 2011 Γιααα διάβασε αυτό εδώ http://java.sun.com/...2SE/monitoring/ Προσωπικά χρησιμοποιώ netbeans οπότε δες κι αυτό http://netbeans.org/kb/articles/nb-profiler-uncoveringleaks_pt1.html
chaos686 Δημοσ. 16 Δεκεμβρίου 2011 Μέλος Δημοσ. 16 Δεκεμβρίου 2011 Γιααα διάβασε αυτό εδώ http://java.sun.com/...2SE/monitoring/ Προσωπικά χρησιμοποιώ netbeans οπότε δες κι αυτό http://netbeans.org/...gleaks_pt1.html To link για το netbeans δείχνει αρκετα χρήσιμο αλλά δυστυχώς είμαι πάλι στο netbook και η οθόνη μου είναι πολύ μικρή για να το χειριστώ.Όταν θα πάω στο pc θα το δω αναλυτικά και θα σου πω αν βοήθησε..
GKNSB Δημοσ. 17 Δεκεμβρίου 2011 Δημοσ. 17 Δεκεμβρίου 2011 Έγινε ενημέρωσε να το έχουμε στα υπόψιν αν προκύψει πάλι αντίστοιχο πρόβλημα. Δε μου έχει τύχει μέχρι στιγμής
defacer Δημοσ. 17 Δεκεμβρίου 2011 Δημοσ. 17 Δεκεμβρίου 2011 Έχεις τσεκάρει μήπως στον αλγόριθμό σου υπάρχει κάποιο memory leak; Memory leak με την κλασσική έννοια δεν μπορεί εκ φύσης να έχει γιατί είναι Java == garbage collected.
nexuss Δημοσ. 17 Δεκεμβρίου 2011 Δημοσ. 17 Δεκεμβρίου 2011 Δεν ισχύει αυτό, γιατί αρχικά ο garbage collector δεν είναι σίγουρο ότι θα τρέξει πάντα (μερικές φορές ακόμα και ποτέ). Στην περίπτωση του φίλου μας που του πέταξε το συγκεκριμένο Error, τα memory leaks είναι η πιο πιθανή αιτία. Ένα αντικείμενο δεν θεωρείται υποψήφιο προς διαγραφή από τον garbage collector παρά μόνο όταν δεν υπάρχουν αναφορές προς αυτό. Οπότε chaos686 επειδή βάζεις τα String σε μια ArrayList, από εκεί ίσως να έπρεπε να ξεκινήσεις το memory leak inspection, γιατί ίσως παραμένουν πολλές αναφορές προς "άχρηστα" αντικείμενα.
chaos686 Δημοσ. 17 Δεκεμβρίου 2011 Μέλος Δημοσ. 17 Δεκεμβρίου 2011 επειδή βάζεις τα String σε μια ArrayList, από εκεί ίσως να έπρεπε να ξεκινήσεις το memory leak inspection, γιατί ίσως παραμένουν πολλές αναφορές προς "άχρηστα" αντικείμενα. Δεν έχω βρει ακριβώς γιατί γίνεται αυτό ακόμα αλλά έχεις σίγουρα δίκιο καθώς το πρόγραμμα τρέχει μιά χαρά αν δεν κρατάω τα String στο arraylist και απλά π.χ μετράω πόσα είναι(και είναι πολλά!). Μόλις μπορέσω θα ενημερώσω για λεπτομέριες. Ευχαριστώ για τις απαντήσεις.
defacer Δημοσ. 17 Δεκεμβρίου 2011 Δημοσ. 17 Δεκεμβρίου 2011 Δεν ισχύει αυτό, γιατί αρχικά ο garbage collector δεν είναι σίγουρο ότι θα τρέξει πάντα (μερικές φορές ακόμα και ποτέ). Στην περίπτωση του φίλου μας που του πέταξε το συγκεκριμένο Error, τα memory leaks είναι η πιο πιθανή αιτία. Ένα αντικείμενο δεν θεωρείται υποψήφιο προς διαγραφή από τον garbage collector παρά μόνο όταν δεν υπάρχουν αναφορές προς αυτό. Οπότε chaos686 επειδή βάζεις τα String σε μια ArrayList, από εκεί ίσως να έπρεπε να ξεκινήσεις το memory leak inspection, γιατί ίσως παραμένουν πολλές αναφορές προς "άχρηστα" αντικείμενα. Ο garbage collector δεν μπορείς να προβλέψεις πότε ακριβώς θα τρέξει, αλλά είναι σίγουρο ότι θα τρέξει όταν το JVM δει ότι ζητάς μνήμη αλλά αυτή που έχει στη διάθεσή του λιγοστεύει επικίνδυνα -- το αντίθετο θα ήταν απλώς ηλίθιο και αυτοί που το έγραψαν δεν είναι ηλίθιοι. Απο και και πέρα, γι' αυτό ακριβώς είπα "με την κλασική έννοια". Αν βάλεις ένα δισεκατομμύριο strings μέσα σε ένα container, αυτό είναι κακός προγραμματισμός όχι memory leak.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα