Tym razem szybko, krótko i przyjemnie. Skupimy się na niezbyt lubianym przez programistów błędzie java.lang.OutOfMemoryError. Niektórzy dostają dreszczy jak spotykają coś takiego na konsoli, ale tak naprawdę nie ma czego się bać. Na logikę biorą zostało zbyt mało pamięci przydzielone w stosunku do zapotrzebowania (zasobów) – lub domyślny przydział jest zbyt mały.
W związku z powyższym należy ten limit zwiększyć. Jedynym problem zatem jest zlokalizowanie miejsca gdzie, i jak tego dokonać. Osobiście spotkałem się raz z taką sytuacją. Miało to miejsce, gdy aplikacja rozwijana przez mój zespół osiągnęła (teraz już wiem) limit przydziału pamięci potrzebnej podczas kompilacji.
Wykorzystując narzędzie Apache Maven do automatyzacji kompilacji aplikacji, należy spodziewać się, że czegoś brakuje (coś należy dodać – wiadomo 🙂 ) do plików konfiguracyjnych .pom. Stacktrace wyświetlony na konsoli pozwolił domniemać, że problem leży gdzieś po stronie wtyczki gwt-maven-plugin. Domyślacie się teraz, że aplikacja została wykonana z wykorzystaniem biblioteki Google Web Toolkit, którą osobiście zachwalam, mimo, że stworzenie czegoś efektownego jest czasochłonne.
Przejdźmy do rozwiązania:
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <outputDirectory>war/WEB-INF/classes</outputDirectory> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>gwt-maven-plugin</artifactId> <version>2.5.0</version> <executions> <execution> <goals> <goal>test</goal> </goals> </execution> </executions> <configuration> <extraJvmArgs>-Xmx1024m</extraJvmArgs> <runTarget>pl.yyy.zzz/zzz.html</runTarget> </configuration> </plugin>
Po zwiększeniu górnego limitu rozmiaru pamięci problem mamy z głowy.
Pozdrawiam, miłego wieczoru 🙂