|
|
Δημοσιεύτηκε στις 14/8/2017 4:49:22 μ.μ.
|
|
|
|

Παρουσιάστηκε σφάλμα κατά την προετοιμασία του VM Δεν ήταν δυνατή η δέσμευση αρκετού χώρου για σωρό αντικειμένων 3145728KB
Πρόσφατα εργάζομαι σε ένα πρόγραμμα για Java. Αρχικά, πάντα μου άρεσε η διαχείριση μνήμης της Java, δεν χρειάζεται να ανησυχείτε για την εκχώρηση μνήμης, απλώς εκχωρήστε, ο συλλέκτης σκουπιδιών θα ανακτήσει τη μνήμη για εσάς. Τώρα το πρόγραμμα έχει αναπτυχθεί με μεγάλο όγκο δεδομένων και για λόγους ταχύτητας, θα φορτώσω όλες τις πληροφορίες στη μνήμη, κάτι που θα εξασφαλίσει γρήγορη απόκριση. Εξακολουθώ να μετράω επανειλημμένα τη μνήμη, σκέφτομαι τη δική μου ποσότητα δεδομένων, η οποία θα πρέπει να είναι αρκετή στην αρχή (το μηχάνημά μου έχει μνήμη 4G, αν και τα Windows αναγνωρίζουν 3.5G, αλλά θα πρέπει να είναι εντάξει σε σύγκριση με τον τρέχοντα όγκο δεδομένων μου).
Απροσδόκητα, το πρόγραμμα του πρώτου πειράματος διήρκεσε λίγες ώρες και συνάντησε μια εξαίρεση εκτός μνήμης. Κοιτάζοντας τις δικές μου ρυθμίσεις VM, έβαλα -Xms512M -Xmx1024M. Χωρίς να το σκεφτώ, το άλλαξα απευθείας σε -Xms512M -Xmx2048M και το αποτέλεσμα ήταν ότι δεν μπορούσα να κρατήσω αρκετό χώρο για σωρό αντικειμένων. Το πρόγραμμα δεν μπορεί να σηκωθεί. Μόνο τότε συνειδητοποίησα ότι υπήρχε ακόμα ένα όριο στην αρχική μέγιστη μνήμη. Έψαξα στο Διαδίκτυο και βρήκα πολλά άρθρα που συζητούσαν αυτό το θέμα. Τέλος, βρήκα το πιο χρήσιμο άρθρο στο DEV2DEV forum του BEA
Εδώ ο συντονιστής YuLimin έκανε το τεστ και κατέληξε στο συμπέρασμα:
Έκδοση JVM εταιρείας Πελάτης μέγιστης μνήμης (mega) Διακομιστής μέγιστης μνήμης (mega)
ΚΥΡ 1.5.x 1492 1520
SUN 1.5.5 (Linux) 2634 2660
ΚΥΡ 1.4.2 1564 1564
SUN 1.4.2 (Linux) 1900 1260
IBM 1.4.2 (Linux) 2047 Δ/Υ
BEA JRockit 1.5 (U3) 1909 1902
Χρησιμοποιώ JDK1.6.0_05 τώρα, το δοκίμασα. Το μεγαλύτερο πράγμα στην κατάσταση πελάτη είναι ότι το JDK μου δεν αναγνωρίζει την παράμετρο -Server και δεν μπορεί να ελέγξει την κατάσταση διακομιστή. Οι εκτιμήσεις είναι περίπου οι ίδιες.
SUN 1.6.0 1442 Α/α
Φαίνεται ότι είναι αδύνατο να χρησιμοποιήσετε μεγάλη μνήμη σε Java. Και το γενικό ρητό είναι ότι αν η μνήμη είναι πολύ μεγάλη, ο χρόνος συλλογής σκουπιδιών θα είναι μεγάλος. Αυτό είναι επίσης κατανοητό, γενικά συλλέγεται όταν η μνήμη δεν είναι αρκετή, η σάρωση της μνήμης 2G είναι φυσικά πολύ πιο αργή από το 1G και υπάρχουν περισσότερα αντικείμενα μνήμης, η εκτιμώμενη σχέση αυξάνεται εκθετικά.
Παρακάτω επισυνάπτονται οι μέθοδοι δοκιμών και τα αρχεία δοκιμών της YuLimin.
Μέθοδος ελέγχου:Δοκιμή με την εντολή java -XmxXXXXM -version κάτω από τη γραμμή εντολώνκαι, στη συνέχεια, αυξήστε σταδιακά την τιμή του XXXX, εάν εκτελεστεί κανονικά, σημαίνει ότι το καθορισμένο μέγεθος μνήμης είναι διαθέσιμο, διαφορετικά θα εκτυπωθεί ένα μήνυμα σφάλματος.
Ελέγξτε τη μέγιστη υποστηριζόμενη μνήμη του JVM και, στη συνέχεια, ορίστε τις μεταβλητές περιβάλλοντος στο σύστημα
Όνομα μεταβλητής: _JAVA_OPTIONS Τιμή: - Xmx1G
|
Προηγούμενος:Χρησιμοποιείται η προσθήκη πλήρους οθόνης jQuery "jQuery Fullscreen Plugin".Επόμενος:Η διαφορά μεταξύ των πιστοποιητικών SSL, OV, DV και EV
|