2011-08-16 21 views
5

masz jakiś pomysł, dlaczego mogę dostać „Wyjątek w wątku«main»java.lang.OutOfMemoryError: Java sterty przestrzeń” błędów przy budowie mojego Android app, nawet Dodałem -vmargs -Xmx1024M -Xms512M do argumentów zaćmienia? Chciałbym wiedzieć, jaki błąd mógłbym popełnić, który spowodowałby taki błąd w czasie kompilacji, ponieważ wydawałoby mi się, że tylko błąd w zaćmieniu lub maven może spowodować taki błąd w czasie kompilacji. Używam uruchamiania jako dodatek do instalacji, aby zbudować moją aplikację (z wtyczką android zaćmienia maven). Uruchom jako-> "pakiet maven" również powoduje taką samą awarię kompilacji, po odczekaniu około 1min30. Mam komputer stacjonarny z 3 GB pamięci, a moja aplikacja nie jest aż tak duża.java przestrzeń sterty

Dzięki.

+0

Czy używasz w swojej aplikacji dowolnych funkcji bitmapowych? –

+0

tak on jest i jestem – Moussa

Odpowiedz

8

Dodaj -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/some/path do argumentów jvm, aby po wyczerpaniu pamięci zrzucił stertę. Następnie można użyć Eclipse Memory Analyser lub jhat, aby przejrzeć stertę i zdiagnozować, gdzie może wystąpić problem.

Aktualizacja: Spróbuj zwiększyć pamięć o swojej wtyczce Android. W swojej pom.xml, dodać argument JVM dla Xmx do konfiguracji wtyczki:

<plugin> 
    <artifactId>maven-android-plugin</artifactId> 
    <configuration> 
    <jvmArguments> 
     <argument>-Xmx1500m</argument> 
    </jvmArguments> 
    </configuration> 
</plugin> 
+0

Przepraszam, nie mogę zrzucić sterty. Czy argumenty te powinny zostać wstawione w tym samym miejscu, co pole tekstowe "Argumenty VM" w "konfiguracji uruchamiania" w środowisku Eclipse, takie jak to: -Xms1024M -Xmx1024M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = "C:"? – John156

+0

@ John156 zobacz moją aktualizację dotyczącą zwiększania pamięci wtyczki – dogbane

+0

o mój Boże, dziękuję bardzo! Próbuję to naprawić przez kilka dni. Czy mogę podać krótkie wyjaśnienie, dlaczego tak działa, dlaczego używają oddzielnych jvms i dlaczego argumenty procesu wywołującego (eclipse, jre, ...) nie są automatycznie ustawione na proces potomny? – John156

2

Twoje argumenty JVM Eclipse nie mają znaczenia. Musisz zwiększyć stertę kompilatora.

Cytuję http://javahowto.blogspot.com/2006/06/fix-javac-java-lang-outofmemoryerror.html

If [...] you're running Eclipse, go into your "run As" dialog for your Build.xml and add -Xms256m -Xmx256m to the "VM Arguments" text box

+0

To było tak sprytne, że przez chwilę naprawdę myślałem, że rozwiąże to mój problem. Nie wiedziałem, że JVM zaćmienia była inna niż kompilatora. Aby było jasne, wystarczy kliknąć strzałkę uruchamiania, uruchomić konfiguracje, wybrać konfigurację uruchamiania, przejść do karty JRE, a w pustym polu tekstowym "Argumenty VM dodać" -Xms1024M - Xmx1024M ", a następnie zastosuj i uruchom. To niestety nie zadziałało, problem pozostaje ten sam. – John156

+0

Tak, ponieważ teraz zdaję sobie sprawę, że używasz wtyczki Android Maven i jej integracji Eclipse. Oznacza to, że ustawienia kompilatora Eclipse nie mają znaczenia, ale ustawienia wtyczki. –

0

Jeśli zwiększenie nie reaguje następnie Proponuję wam, że sprawdzenia liczyć dla każdej klasy, który napisałeś. Może to być problem z kompilatorem, jeśli jest dużo obiektów, więc spróbuj metod partycjonowania i/lub skopiuj je na nowe klasy, jeśli jedna lub więcej klas ma 3000+ linii.

1

Doświadczyłem, że Konwersja do formatu Dalvik nie powiodła się: Nie można wykonać dex: Przestrzeń sterty Java. zwiększenie wartości w pliku eclipse.ini nie pomogło. Zdarzyło mi się to po aktualizacji mojej wtyczki ADT z 12 na 16. Zmieniłem zestawy SDK systemu Android, które zostały wskazane do moich istniejących projektów przed aktualizacją (z androidów SDK, które były połączone na moim poprzednim tekście zmieniłem je na android sdks które były połączone z moim nowym adt) i rozwiązało problem dla mnie. mam nadzieję że to pomoże. i jeśli pomaga komuś, proszę zagłosuj na plus 1 to.

Powiązane problemy