Hiba történt a VM inicializálása közben Nem tudtam elég helyet tartani 3145728KB objektumhalmaznak
Nemrég dolgoztam egy Java programon. Eredetileg mindig is tetszett a Java memóriakezelése, nem kell aggódni a memória kiosztása miatt, csak osztd ki, a szemetgyűjtő visszaszerezi a memóriát neked. Most a program nagy mennyiségű adattal van fejlesztve, és a sebesség érdekében minden információt betöltök a memóriába, ami gyors választ biztosít. Még mindig ismételten számolom a memóriát, gondolkodom a saját adatmennyiségemen, ami eleinte elég lesz (a gépemnek 4G memóriája van, bár a Windows felismeri a 3,5G-t, de az a jelenlegi adatmennyiséghez képest rendben kellene lennie).
Váratlanul az első kísérlet programja néhány órán át futott, és találkozott egy Out of Memory Exception-tal. A saját VM beállításaimat nézve beállítottam -Xms512M -Xmx1024M-t. Anélkül, hogy gondolkodtam volna rajta, közvetlenül -Xms512M -Xmx2048M-re változtattam, és az lett, hogy nem tudtam elég helyet tartani az objektumhalomnak. A program nem tud felkelni. Csak ekkor jöttem rá, hogy az eredeti maximális memória még mindig van korlát. Az interneten keresgéltem, és sok cikket találtam, amely erről a témáról szól. Végül megtaláltam a leghasznosabb cikket a BEA DEV2DEV fórumán
Itt YuLimin moderátor végezte el a tesztet, és a következtetésre jutott:
Cég JVM verziója Maximális memória (mega) kliens Maximum memória (mega) szerver
SUN 1.5.x 1492 1520
SUN 1.5.5(Linux) 2634 2660
VASÁRNAP 1.4.2 1564 1564
SUN 1.4.2 (Linux) 1900 1260
IBM 1.4.2(Linux) 2047 N/A
BEA JRockit 1.5 (U3) 1909 1902
Most használom JDK1.6.0_05, teszteltem. A kliensállapotban a legnagyobb probléma, hogy a JDK-m nem ismeri fel a -Server paramétert, és nem tudja tesztelni a szerver állapotát. A becslések nagyjából ugyanazok.
VASÁRNAP 1.6.0 1442 N/a
Úgy tűnik, lehetetlen nagy memóriát használni Java-ban. És az általános mondás az, hogy ha a memória túl nagy, akkor a szemétgyűjtés ideje hosszú lesz. Ez is érthető, általában akkor gyűjtik össze, amikor a memória nem elég, a 2G memória szkennelése természetesen sokkal lassabb, mint az 1G, és több memóriaobjektum van, a becsült összefüggés exponenciálisan nő.
Az alábbiakban csatolva találhatók a YuLimin tesztmódszerei és tesztrekordjai.
Tesztmódszer:Tesztelje a java -XmxXXXXM -verziós parancsot a parancssorban, majd fokozatosan növeljük az XXXX értékét, ha normálisan futtatják, az azt jelenti, hogy a megadott memóriaméret elérhető, különben hibaüzenet jelenik meg.
Teszteljük a JVM maximális támogatott memóriáját, majd állítsuk be a rendszer környezeti változóit
Változó név: _JAVA_OPTIONS Érték: - Xmx1G
|