Otrzymuję tę wiadomość podczas kompilacji mojego projektu
java.lang.OutOfMemoryError: Miejsce na sterty Java
Jak zwiększyć miejsce na stercie, mam 8 Gb lub RAM, to niemożliwe, żeby maven zużywał tak dużo, znalazłem to http://vikashazrati.wordpress.com/2007/07/26/quicktip-how-to-increase-the -java-heap-memory-for-maven-2-on-linux / jak to zrobić na Linuksie, ale pracuję na Windows 7. Jak mogę zmienić miejsce na stosie java pod oknami?
Odpowiedzi:
Zmienna środowiskowa do zestawu jest
MAVEN_OPTS
, na przykładMAVEN_OPTS=-Xmx1024m
.maxmem
Konfiguracja w pom Dotyczy tylko po ustawieniu plugin kompilator widelecjavac
do nowej JVM. W przeciwnym razie wtyczka działa na tej samej maszynie wirtualnej co Maven, a zatem w pamięci przekazywanej w wierszu poleceń za pośrednictwemMAVEN_OPTS
.Aby ustawić MAVEN_OPTS w systemie Windows 7:
-Xmx1024m
(lub więcej)Otwórz nowe okno poleceń i uruchom
mvn
.źródło
Jeśli zabraknie miejsca na sterty podczas niezawodnego (lub bezpiecznego) przebiegu testowania JUnit, zmiana MAVEN_OPTS może nie pomóc. Próbowałem różnych konfiguracji w MAVEN_OPTS bez powodzenia, dopóki nie znalazłem tego posta, który rozwiązał problem.
Zasadniczo JUnits rozwidlają się do własnego środowiska i ignorują ustawienia w MAVEN_OPTS. Musisz skonfigurować pewne działanie w swoim pomie, aby dodać więcej pamięci dla JUnits.
Miejmy nadzieję, że może to zaoszczędzić trochę czasu komuś innemu!
Edycja: Kopiowanie rozwiązania z bloga Keitha Chapmana na wypadek, gdyby łącze któregoś dnia pękło:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <forkMode>pertest</forkMode> <argLine>-Xms256m -Xmx512m</argLine> <testFailureIgnore>false</testFailureIgnore> <skip>false</skip> <includes> <include>**/*IntegrationTestSuite.java</include> </includes> </configuration> </plugin>
Aktualizacja (31.05.2017): Dziękuję @johnstosh za wskazanie tego - surefire nieco ewoluował, odkąd zamieściłem tę odpowiedź. Oto link do ich dokumentacji i zaktualizowany przykładowy kod (linia arg jest nadal ważną częścią tego pytania):
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.20</version> <configuration> <forkCount>3</forkCount> <reuseForks>true</reuseForks> <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine> <systemPropertyVariables> <databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema> </systemPropertyVariables> <workingDirectory>FORK_DIRECTORY_${surefire.forkNumber}</workingDirectory> </configuration> </plugin>
źródło
Powinno to być to samo polecenie, z wyjątkiem SET zamiast EXPORT
źródło
C:\my_project>MAVEN_OPTS=-Xmx512m 'MAVEN_OPTS' is not recognized as an internal or external command, operable program or batch file.
Na komputerze Mac: zamiast
JAVA_OPTS
iMAVEN_OPTS
użyj zamiast tego _JAVA_OPTIONS. To działa!źródło
Po próbie użycia zmiennej MAVEN_OPTS bez powodzenia trafiłem na tę stronę, która działała dla mnie. Więc wszystko, co musiałem zrobić, to dodać -Xms128m -Xmx1024m do domyślnych opcji maszyny wirtualnej i zadziałało.
Aby zmienić je w Eclipse, przejdź do Window -> Preferences -> Java -> Installed JREs. Wybierz zaznaczone JRE / JDK i kliknij edytuj.
źródło
W systemie Windows:
Dodaj zmienną środowiskową (zarówno w zmiennych systemowych, jak i użytkownika, mam dziwny problem, że pobiera zmienną z różnych miejsc, więc dodaję je w obu).
Nazwij go MAVEN_OPTS.
Wartość będzie:
-Xms1024m -Xmx3000m -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled
Liczby mogą być różne, ułóż je w stosunku do rozmiaru twojego mema.
Miałem ten problem i to go naprawiło, nic więcej!
źródło
Zadziałało - Aby zmienić w Eclipse, przejdź do Window -> Preferences -> Java -> Installed JREs. Wybierz zaznaczone JRE / JDK i kliknij edytuj.
Domyślne argumenty maszyny wirtualnej = -Xms128m -Xmx1024m
źródło
Szukasz 2 możliwości
java
:Umieść je w wywołaniu wiersza poleceń
java
pliku wykonywalnego, na przykład:Pamiętaj, że możesz chcieć, aby początkowe i maksymalne rozmiary sterty były takie same, w zależności od aplikacji, ponieważ pozwala to uniknąć zmiany rozmiaru sterty w czasie wykonywania (co może zająć trochę czasu w aplikacjach, które muszą reagować). Zmiana rozmiaru sterty może wiązać się z przenoszeniem wielu obiektów i ponownym prowadzeniem księgowości.
W przypadku codziennych projektów rób to, co uważasz za wystarczająco dobre. Profil w celu uzyskania pomocy.
źródło