Javítás: A virtuális gép inicializálása során bekövetkezett hiba nem tudott elegendő helyet lefoglalni az objektumkupac számára

Annak ellenére, hogy a Java kisalkalmazások manapság nem népszerű internetes technológiák, számtalan oka van annak, hogy egy Java virtuális gépet közvetlenül egy Linux szerverre telepítsenek. Ha egyenesen diszkrét hardveren vagy a saját virtuális gépén belül próbálja futtatni a Linux java parancsot, akkor előfordulhat, hogy „egy hiba történt a virtuális gép inicializálása során nem tudott elegendő helyet lefoglalni az objektumkupac számára” üzenetet.

Ez valószínűleg meglehetősen furcsának tűnik, mivel több mint valószínű, hogy van elegendő RAM a parancs futtatásához, de ez nagyrészt annak köszönhető, hogy a fizikai és a virtuális memória oldalak szoktak használni. Néhány viszonylag nagy méret megadásával lehetővé kell tennie, hogy teljesen megkerülje ezt az üzenetet, és futtassa a java parancsot a többi módon.

1. módszer: A parancssori opciók használata

Ha megpróbálta futtatni a Java-t, és megkapta ezt az üzenetet, akkor valószínűleg már futtatta az ingyenes parancsot, hogy megbizonyosodjon arról, hogy elegendő memória található a program futtatásához.

java és ingyenes parancsok

Vegyük észre, hogy tesztgépünkön 2,3 GB fizikai RAM állt rendelkezésünkre, és egyetlen oldal virtuális memóriát sem használtunk még fel. Ha észreveszi, hogy memóriagörcse van, akkor az újbóli próbálkozás előtt be kell zárnia más futó dolgokat. Azok viszont, akik azt találták, hogy rengeteg szabad memóriájuk van, megpróbálhatják közvetlenül megadni a méretet.

Például a gépünkön futtathattuk a parancsot java -Xms256m -Xmx512M formátumban, és úgy működött, mintha egyébként elvárták volna tőle. Ez korlátozza a halom méretét, amelyet a Java virtuális gép indításkor megkísérel fenntartani. Mivel egy korlátlan virtuális gép hipotetikusan szokatlan dolgokat képes végrehajtani, hibaüzeneteket dobhat egy egyébként szabad rendszerre. Érdemes eljátszani ezt a két értéket, mielőtt megtalálja a megfelelő kombinációt.

Ez problémát jelenthet, függetlenül attól, hogy mit futtat, mivel a JVM-nek semmi köze a GNU / Linux futtatásához használt virtuális gép típusához.

2. módszer: A változók exportálása a változás állandóvá tételéhez

Ha talál egy működő értéket, exportálhatja, hogy állandóvá váljon az adott munkamenethez. Például az _JAVA_OPTIONS = '- Xms256M -Xmx512M' exportot használtuk a bash parancssorból, és ez lehetővé tette számunkra, hogy a java parancsot minden más lehetőség nélkül futtassuk, amíg ki nem jelentkezünk a szerverünkről.

Újra futtatni kellett, amikor bejelentkeztünk egy másik munkamenetbe, ezért érdemes hozzáadnia a releváns indítási szkriptekhez, ha azt tervezi, hogy a java parancsot gyakran használja. Hozzáadtuk a sort a .bash_login fájlunkhoz, és úgy tűnt, hogy minden alkalommal működik, amikor egy bejelentkezési parancsot használtunk anélkül, hogy újra kellett volna futtatnunk, bár előfordulhat, hogy más helyet kell keresnie annak, ha más héjjal dolgozik.

Lehet, hogy észrevette, hogy csak bizonyos hardverkonfigurációk váltják ki ezt a hibaüzenetet. Ez azért van, mert általában olyan gépeken történik, amelyek nagy fizikai RAM-mal rendelkeznek, de alacsonyabb értékekkel rendelkeznek a használatához. A Java megpróbál kiosztani egy hatalmas blokkot, hogy csak azt mondják neki, hogy nem tudja, amit úgy értelmez, hogy kifogy a memória.

3. módszer: Az aktuális Java-opciók nyomtatása

Ha a parancssorban dolgozott, és szeretne gyors tájékoztatást kapni arról, amire jelenleg beállította a _JAVA_OPTIONS értéket, akkor egyszerűen futtassa az echo $ _JAVA_OPTIONS fájlt, és azonnal kinyomtatja az aktuális értékeket. Ez akkor hasznos a hibaelhárításhoz, amikor megpróbálja kitalálni a megfelelő számokat.

Ne feledje, hogy bár ez a javítás nem igényel semmilyen más játékot, a Java kidobja a „nem tudtam elegendő helyet lefoglalni az objektumkupacnak” üzenetet, ha valaha valóban a virtuális memória rövid végén találja magát. Ha ez a helyzet, akkor még egyszer ellenőriznie kell a folyamatban lévő folyamatokat, és ha szükséges, indítsa újra a szervert. Létrehozhat több csere helyet is, de ha ez egy kérdés, akkor jobb, ha más módon megpróbálja kijavítani.

Abban a ritka esetben, ha úgy tűnik, hogy a beállítások megfelelőek, de még mindig nem működnek, ellenőrizze, hogy telepítette-e a 64 bites Java csomagot, mivel immunisnak kell lennie erre a problémára. Az egybefüggő memóriaigények csak a Java 32 bites verziójára vonatkoznak. Néhány esetben azt találtuk, hogy a 64 bites verzió megpróbált létrehozni egy 32 bites virtuális gépet, így a parancssorban a -d64 opció megadása javította azt számunkra.