|
|
Julkaistu 14.8.2017 16.49.22
|
|
|
|

Virhe tapahtui VM:n alustuksen aikana Ei onnistunut varaamaan tarpeeksi tilaa 3145728KB objektipinolle
Olen äskettäin työskennellyt Java-ohjelman parissa. Alun perin olen aina pitänyt Javan muistinhallinnasta, ei tarvitse huolehtia muistin jakamisesta, vain varaa se, roskien kerääjä ottaa muistin takaisin puolestasi. Nyt ohjelma on kehitetty suurella datamäärällä, ja nopeuden vuoksi lataan kaiken tiedon muistiin, mikä varmistaa nopean vasteen. Lasken edelleen muistia toistuvasti, mietin omaa datamäärääni, joka pitäisi riittää alussa (koneessani on 4G-muisti, vaikka Windows tunnistaa 3,5G:n, mutta sen pitäisi olla kunnossa nykyiseen datamäärääni verrattuna).
Yllättäen ensimmäisen kokeen ohjelma käynnistyi muutaman tunnin ja kohtasi Muistin Ulkopuolisen poikkeuksen. Katsoessani omia virtuaalikoneen asetuksiani asetin -Xms512M -Xmx1024M. Ilman ajatusta muutin sen suoraan muotoon -Xms512M -Xmx2048M, ja lopputuloksena en pystynyt varaamaan tarpeeksi tilaa objektikasalle. Ohjelma ei pääse ylös. Vasta silloin tajusin, että alkuperäisellä maksimimuistilla oli vielä raja. Etsin internetistä ja löysin monia artikkeleita, joissa käsiteltiin tätä aihetta. Lopuksi löysin hyödyllisimmän artikkelin BEA:n DEV2DEV-foorumilta
Tässä moderaattori YuLimin teki testin ja päätyi johtopäätökseen:
Yrityksen JVM-versio Maksimimuisti (mega) asiakas Maksimimuisti (mega) palvelin
SUN 1.5.x 1492 1520
SUN 1.5.5 (Linux) 2634 2660
SU 1.4.2 1564 1564
SUN 1.4.2 (Linux) 1900 1260
IBM 1.4.2(Linux) 2047 ei saatavilla
BEA JRockit 1.5 (U3) 1909 1902
Käytän JDK1.6.0_05 nyt, testasin sitä. Suurin ongelma asiakastilassa on, että JDK:ni ei tunnista -Server-parametria eikä pysty testaamaan palvelimen tilaa. Arviot ovat suunnilleen samat.
SU 1.6.0 1442 Ei saatavilla
Näyttää siltä, että Javassa on mahdotonta käyttää suurta muistia. Yleinen sanonta on, että jos muisti on liian suuri, roskien keräysaika on pitkä. Tämä on myös ymmärrettävää, yleensä kerätään, kun muisti ei riitä, 2G-muistin skannaus on tietenkin paljon hitaampaa kuin 1G:n, ja muistiobjekteja on enemmän, arvioitu suhde kasvaa eksponentiaalisesti.
Alla on liitteenä YuLiminin testimenetelmät ja testitiedot.
Testimenetelmä:Testaa java -XmxXXXXM -version komentoa komentorivin alla, ja sitten nostetaan XXXX:n arvoa vähitellen, jos se suoritetaan normaalisti, se tarkoittaa, että määritetty muistikoko on käytettävissä, muuten virheilmoitus tulostuu.
Testaa JVM:n maksimituettu muisti ja aseta sitten järjestelmän ympäristömuuttujat
Muuttujan nimi: _JAVA_OPTIONS Arvo: - Xmx1G
|
Edellinen:jQuery fullscreen -lisäosa on käytössä "jQuery Fullscreen Plugin"Seuraava:Ero SSL-, OV-, DV- ja EV-sertifikaattien välillä
|