Nie można wykonać dex: limit obciążenia GC został przekroczony w Eclipse

213

Kiedy pobrałem projekt Git OsmAnd i poszedłem go skompilować, Eclipse zwrócił te błędy:

[Dex Loader] Unable to execute dex: GC overhead limit exceeded
[OsmAnd]     Conversion to Dalvik format failed: 
             Unable to execute dex: GC overhead limit exceeded

Google i Stackoverflow powiedział, że muszę zmienić -Xms40m -Xmx384mw eclipse.ini. Konwersja do formatu Dalvik nie powiodła się: Nie można wykonać dex: przestrzeni sterty Java .
Wyczyściłem projekt i zrestartowałem Eclipse, ale to nie pomogło.

Znalazłem ten link: Wskazówki dla programistów Androida: „Konwersja do formatu Dalvik nie powiodła się: Nie można wykonać dex: null” Ale nie wiem, .jarz którego projektu mogę zmienić dane wejściowe. Jeśli ktoś może pomóc, mogę wysłać projekt do im.

DavyJonesUA
źródło

Odpowiedzi:

437

Można to naprawić, zmieniając wartości VM w Eclipse.ini. Ustaw wartości na 512 i 1024, jak poniżej:

openFile
--launcher.XXMaxPermSize
512M
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms512m
-Xmx1024m

Zmieniony obszar na obrazie wprowadź opis zdjęcia tutaj

użytkownik1457659
źródło
8
Dzięki. Zastanawiam się, dlaczego wartości domyślne są tak absolutnie nieadekwatne, nie sądzę, żeby ktokolwiek miał zaćmienie z mniej niż 512/1024 - po prostu poszedłem nawet dwukrotnie. Dodatkowo chciałbym, aby ustawienia były przechowywane w jakimś pliku konfiguracyjnym w moim katalogu domowym zamiast pliku ini, który jest zastępowany przy każdej aktualizacji.
Yashima,
11
Potrzebujesz --launcher.XXMaxPermSize 512mdwa razy?
Andrew Wyld
4
Jakie są ograniczenia tych liczb? Jak wysoko powinienem je postawić?
easycheese
5
@MuhammadRiyaz Zależy to od systemu operacyjnego i tego, czy używasz 32-bitowej, czy 64-bitowej maszyny JVM. Jeśli korzystasz z 64-bitowej maszyny JVM, możesz bezpiecznie ustawić ją na wartość mniejszą niż rozmiar pamięci RAM minus narzut dla OS / innych aplikacji. Na 32-bitowej maszynie wirtualnej chcesz zachować ją mniejszą niż około 1500 mln (w systemie Linux) lub 1100 mln (w systemie Windows), ponieważ maszyna wirtualna musi przydzielić ciągłą przestrzeń adresową, a to bardzo ograniczone zasoby dla aplikacji 32-bitowych.
Jules
4
-XX: MaxPermSize = 1024m -Xms1024m -Xmx2048m pomógł
kreker
24

Dla mnie zadziałały następujące kroki

1) Open eclipse.ini file
2)changed
-Xms40m
-Xmx512m
to 
-Xms512m
-Xmx1024m

3)Restart eclipse

Spójrz tutaj

Sunil Kumar Sahoo
źródło
11
W systemie OSX plik eclipse.ini znajduje się w Eclipse.app/Contents/MacOS/
Ahmad Baraka
7

eclipse.ini wygląda tak.

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20140116-2212
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-XX:MaxPermSize=256m
-Xms40m
-Xmx512m
-Xmx1024m
Roadies
źródło
5

Załóżmy, że ten problem spowodowany jest przez XML XML, ponieważ bardzo często go otwierasz

Poniższe dwa problemy dotyczące StackOverFlow są ze sobą powiązane:

Za każdym razem, gdy klikam plik XML systemu Android w Eclipse, ładuje on dane dla wszystkich wersji API

i

Nie można wykonać dex: Przekroczono limit obciążenia GC

Znalazłem jeszcze jedno rozwiązanie rozwiązania tego problemu, oprócz zwiększenia wartości maszyn wirtualnych lub obniżenia do starszej wersji ADT (22.6.2 lub 23.2)

Uwaga:

Niektóre starsze wersje ADT, które nie ładują XML za każdym razem, gdy otwierasz, więc nie ma przepełnienia pamięci, które spowodowałoby przekroczenie limitu obciążenia GC, jak omówiono w pierwszym wątku

Rozwiązanie:

Na dole zaćmienia znajduje się symbol kosza na śmieci, który mówi Run Garbage Collector . Gdy zamykasz plik XML Androida, nie zapomnij kliknąć Kosza lub Uruchom Garbage Collector aby zwolnić pamięć. W ten sposób możesz zabezpieczyć obszar roboczy przed awarią tego rodzaju błędu: D

To może być najlepsze rozwiązanie, ponieważ nie możesz zwiększyć wartości VM powyżej limitu pamięci RAM, jeśli bardzo często otwierasz Android XML, szczególnie jeśli wykonujesz wiele interfejsów użytkownika, takich jak ja: P

Mam nadzieję, że pomogłoby to wszystkim, którzy przejdą do tego wątku :)

Zachowaj spokój i kod włączony

Akbar Sha Ebrahim
źródło
1

Po 12 godzinach z tym błędem i bez powodzenia przy zmianie pliku eclipse.ini w końcu znalazłem właściwe rozwiązanie. W moich zmiennych środowiskowych była zmienna o nazwie „_JAVA_OPTIONS” zawierająca wartość „-Xmx512M”. Zmieniając tę ​​wartość na tę samą, co w eclipse.ini (-Xmx4096M), po raz kolejny mogłem wyeksportować mój projekt do pliku APK.

Viktor
źródło
w rzeczywistości może to być naprawdę ważna wskazówka, możesz usunąć _JAVA_OPTIONS ze zmiennych systemowych (użyj szybkiego edytora środowiska), w przeciwnym razie proguard może zacząć narzekać z jakiegoś powodu. Wielkie dzięki dla Viktora
Simon
1

NIE znam przyczyny tego obejścia, ale działa to dla mnie przez cały czas, gdy wszystkie powyższe nie.

Nie zaczynaj zaćmienia za pomocą skrótu lub linku. Zawsze otwieraj go eclipse.exew folderze Eclipse, w tym samym folderze, w którym znajduje sięeclipse.ini

Uwaga - próbowałem tylko dla systemu Linux.

Atul O Holic
źródło
1

Aby uniknąć tego irytującego komunikatu, musiałem zmienić konfigurację w następujący sposób:

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-

144807
-product
com.android.ide.eclipse.adt.package.adtproduct
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
1024m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.6
-XX:MaxPermSize=256m
-Xms512m
-Xmx1024m

na podstawie odpowiedzi oznaczonej jako poprawna, zmieniająca się

-XX:MaxPermSize=256m
-Xms512m
-Xmx1024m

i:

--launcher.XXMaxPermSize
1024m
Jorgesys
źródło
1
1) Open eclipse.ini file
2)change
-Xms40m
-Xmx512m
to 
-Xms512m
-Xmx1024m
3)Restart eclipse

Ten sam plik eclipse.ini będzie znajdować się w Eclipse w tej ścieżce katalogu głównego zaćmienia:

C:\Users\username\Downloads\adt-bundle-windows-x86_64-20140702\eclipse\eclipse.ini

Ten sam plik będzie znajdować się w projekcie Android Studio: -

C:\Users\username\AppData\Local\Android\sdk\tools\lib\monitor-x86_64\monitor(Type:Configuration settings)
anand krish
źródło
0

Jeśli te odpowiedzi nie działają (nie dla mnie), spróbuj tego:

1) Wykonaj kopię swojego folderu .metadata w swoim obszarze roboczym.

2) Usuń katalog .metadata PO WYKONANIU KOPII

3) Otwórz środowisko Eclipse i zamknij środowisko Eclipse.

4) Skopiuj folder wtyczek ze starej .metadata do nowej .metadata

5) Zaimportuj wszystkie projekty z powrotem do swojego obszaru roboczego

6) Zachowaj spokój i kod włączony!

tricknology
źródło