Środowisko wykonawcze Androida i Dalvik

Środowisko wykonawcze systemu Android (ART) to zarządzane środowisko wykonawcze używane przez aplikacje i niektóre usługi systemowe w systemie Android. ART i jego poprzednik Dalvik zostały pierwotnie stworzone specjalnie na potrzeby projektu Android. ART jako środowisko wykonawcze wykonuje format pliku wykonywalnego Dalvik (DEX) i specyfikację kodu bajtowego DEX.

ART i Dalvik to kompatybilne środowiska wykonawcze obsługujące kod bajtowy DEX, więc aplikacje opracowane dla Dalvik powinny działać podczas pracy z ART. Jednak niektóre techniki, które działają na Dalvik, nie działają na ART. Informacje o najważniejszych kwestiach znajdziesz w artykule Weryfikowanie zachowania aplikacji w środowisku wykonawczym Androida (ART) .

Funkcje SZTUKI

Oto niektóre z głównych funkcji zaimplementowanych przez ART.

Kompilacja z wyprzedzeniem (AOT).

ART wprowadza kompilację z wyprzedzeniem (AOT), która może poprawić wydajność aplikacji. ART ma również bardziej rygorystyczną weryfikację czasu instalacji niż Dalvik.

Podczas instalacji ART kompiluje aplikacje za pomocą wbudowanego w urządzenie narzędzia dex2oat . To narzędzie akceptuje pliki DEX jako dane wejściowe i generuje skompilowany plik wykonywalny aplikacji dla urządzenia docelowego. Narzędzie powinno bez problemu skompilować wszystkie prawidłowe pliki DEX. Jednakże niektóre narzędzia do przetwarzania końcowego tworzą nieprawidłowe pliki, które mogą być tolerowane przez Dalvik, ale nie mogą być kompilowane przez ART. Aby uzyskać więcej informacji, zobacz sekcję Rozwiązywanie problemów związanych ze zbieraniem elementów bezużytecznych .

Ulepszone zbieranie śmieci

Wyrzucanie elementów bezużytecznych (GC) pochłania duże zasoby, co może obniżyć wydajność aplikacji, powodując niestabilne wyświetlanie, słabą responsywność interfejsu użytkownika i inne problemy. ART usprawnia zbieranie śmieci na kilka sposobów:

  • Przeważnie współbieżny projekt z pojedynczą przerwą GC
  • Równoczesne kopiowanie w celu zmniejszenia zużycia i fragmentacji pamięci w tle
  • Długość przerwy GC jest niezależna od rozmiaru sterty
  • Kolektor z niższym całkowitym czasem GC dla specjalnego przypadku czyszczenia ostatnio przydzielonych, krótkotrwałych obiektów
  • Poprawiona ergonomia usuwania elementów bezużytecznych, dzięki czemu współbieżne wyrzucanie elementów bezużytecznych jest bardziej aktualne, co sprawia, że ​​zdarzenia GC_FOR_ALLOC są niezwykle rzadkie w typowych przypadkach użycia

Ulepszenia w zakresie programowania i debugowania

ART oferuje szereg funkcji usprawniających tworzenie i debugowanie aplikacji.

Wsparcie dla profilera próbkowania

Historycznie rzecz biorąc, programiści używali narzędzia Traceview (przeznaczonego do śledzenia wykonywania aplikacji) jako profilera. Chociaż Traceview dostarcza przydatnych informacji, jego wyniki dotyczące Dalvik zostały wypaczone przez obciążenie wywołania metody, a użycie tego narzędzia zauważalnie wpływa na wydajność w czasie wykonywania.

ART dodaje obsługę dedykowanego profilera próbkowania, który nie ma tych ograniczeń. Daje to dokładniejszy obraz działania aplikacji bez znaczących spowolnień. W wersji KitKat dodano obsługę próbkowania do Traceview dla Dalvik.

Obsługa większej liczby funkcji debugowania

ART obsługuje wiele nowych opcji debugowania, szczególnie w zakresie funkcjonalności związanych z monitorowaniem i zbieraniem śmieci. Możesz na przykład:

  • Zobacz, jakie blokady są przechowywane w śladach stosu, a następnie przejdź do wątku, który zawiera blokadę.
  • Zapytaj, ile jest aktywnych instancji danej klasy, poproś o obejrzenie instancji i zobacz, jakie odniesienia utrzymują obiekt przy życiu.
  • Filtruj zdarzenia (takie jak punkt przerwania) dla konkretnej instancji.
  • Zobacz wartość zwróconą przez metodę przy jej wyjściu (przy użyciu zdarzeń „method-exit”).
  • Ustaw punkt kontrolny pola, aby zawiesił wykonywanie programu w przypadku uzyskania dostępu i/lub modyfikacji określonego pola.

Poprawione szczegóły diagnostyczne w wyjątkach i raportach o awariach

ART zapewnia jak najwięcej kontekstu i szczegółów, gdy wystąpią wyjątki w czasie wykonywania. ART udostępnia rozszerzone szczegóły wyjątków dla java.lang.ClassCastException , java.lang.ClassNotFoundException i java.lang.NullPointerException . (Późniejsze wersje Dalvik zapewniły rozszerzone szczegóły wyjątków dla java.lang.ArrayIndexOutOfBoundsException i java.lang.ArrayStoreException , które teraz obejmują rozmiar tablicy i przesunięcie poza zakresem, a ART również to robi.)

Na przykład java.lang.NullPointerException wyświetla teraz informacje o tym, co aplikacja próbowała zrobić ze wskaźnikiem zerowym, takie jak pole, do którego aplikacja próbowała pisać, lub metoda, którą próbowała wywołać. Oto kilka typowych przykładów:

java.lang.NullPointerException: Attempt to write to field 'int
android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object
reference
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.lang.Object.toString()' on a null object reference

ART zapewnia także ulepszone informacje kontekstowe w natywnych raportach o awariach aplikacji, uwzględniając zarówno informacje o Javie, jak i natywnym stosie.

Zgłoś problemy

Jeśli napotkasz jakiekolwiek problemy, które nie są spowodowane problemami JNI w aplikacji, zgłoś je za pomocą narzędzia do śledzenia problemów z projektem Android Open Source . Dołącz adb bugreport i link do aplikacji w sklepie Google Play, jeśli jest dostępny. W przeciwnym razie, jeśli to możliwe, dołącz plik APK odtwarzający problem.