Ten eerste, ik heb een box met 8gb ram, dus ik betwijfel of het totale geheugen het probleem is. Deze applicatie draait prima op machines met 6gb of minder.
Ik probeer 3GB ruimte te reserveren met -Xmx3G onder "VM Arguments" in Run Configurations in Eclipse.
Elke keer als ik meer dan 1500mb probeer te reserveren, krijg ik deze foutmelding: "Fout opgetreden tijdens initialisatie van VM; Kon niet genoeg ruimte reserveren voor object heap" met behulp van -Xmx3G
Wat is hier aan de hand?
Dit is eigenlijk geen Eclipse-specifiek probleem; het'is een algemene Java-op-Windows probleem. Het komt door de manier waarop de JVM geheugen toewijst op Windows; het dringt aan op het toewijzen van een aaneengesloten stuk geheugen, dat Windows vaak niet kan leveren, zelfs als er genoeg afzonderlijke brokken zijn om aan het toewijzingsverzoek te voldoen. Er zijn hulpprogramma's die Windows proberen te helpen "defrag" zijn geheugen, wat, in theorie, deze situatie zou helpen; maar ik'heb ze niet echt uitgeprobeerd, dus ik kan niet spreken over hun doeltreffendheid. Een ding dat ik'heb gehoord dat soms zou kunnen helpen is om Windows opnieuw op te starten en, alvorens andere apps te starten, de Java app te starten die de grote brok geheugen nodig heeft. Als je geluk hebt, heeft Windows zijn geheugen nog niet gefragmenteerd geheugenruimte nog niet gefragmenteerd en zal Java het aaneengesloten blok krijgen waar het om vraagt.
Ergens op de interwebs zijn er meer technische verklaringen en analyses van dit probleem, maar ik heb geen referenties bij de hand.
Ik vond wel dit, dat er behulpzaam uitziet: https://stackoverflow.com/a/497757/639520
Zorg ervoor dat Eclipse eigenlijk dezelfde JVM draait als je denkt dat het draait's. Als je ooit java in je web browser gebruikt, heb je waarschijnlijk ook een 32-bit versie rondzweven die misschien voorrang heeft als die recent geïnstalleerd of geupdate is.
Om absoluut zeker te zijn, raad ik aan deze twee regels bovenaan in je eclipse.ini
bestand te zetten:
-vm
C:/Java/jdk1.6.0_27/bin
...waar op mijn machine C:/Java/jdk1.6.0_27/bin
staat, waar de JVM staat waarvan ik weet dat hij 64-bit is. Zorg ervoor dat de bin
map daar staat.
(Als een bonus, op Windows 7, staat dit je ook toe om de tab vast te zetten" wat de reden is waarom ik dit moest doen voor mijn eigen gebruik)