Android Runtime (ART) 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 dla projektu Android. ART jako środowisko wykonawcze wykonuje format Dalvik Executable i specyfikację kodu bajtowego Dex.

ART i Dalvik to kompatybilne środowiska uruchomieniowe z kodem bajtowym Dex, więc aplikacje opracowane dla Dalvik powinny działać z ART. Jednak niektóre techniki, które działają w Dalvik, nie działają w ART. Aby uzyskać informacje o najważniejszych problemach, zobacz Weryfikowanie zachowania aplikacji w środowisku uruchomieniowym systemu Android (ART) .

Funkcje SZTUKI

Oto niektóre z głównych funkcji wdrożonych przez ART.

Kompilacja z wyprzedzeniem (AOT)

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

W czasie instalacji ART kompiluje aplikacje za pomocą narzędzia dex2oat na urządzeniu. To narzędzie akceptuje pliki DEX jako dane wejściowe i generuje skompilowany plik wykonywalny aplikacji dla urządzenia docelowego. Narzędzie powinno być w stanie bez trudu skompilować wszystkie prawidłowe pliki DEX. Jednak niektóre narzędzia do przetwarzania końcowego tworzą nieprawidłowe pliki, które mogą być tolerowane przez Dalvik, ale nie mogą być skompilowane przez ART. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów ze zbieraniem śmieci .

Ulepszone zbieranie śmieci

Zbieranie śmieci (GC) jest bardzo zasobożerne, co może pogorszyć wydajność aplikacji, powodując przerwy w wyświetlaniu, słabą reakcję interfejsu użytkownika i inne problemy. ART usprawnia zbieranie śmieci na kilka sposobów:

  • Przeważnie współbieżny projekt z pojedynczą pauzą GC
  • Jednoczesne kopiowanie w celu zmniejszenia zużycia pamięci w tle i fragmentacji
  • Długość pauzy GC jest niezależna od wielkości sterty
  • Kolektor z niższym całkowitym czasem GC do specjalnego przypadku czyszczenia niedawno przydzielonych, krótko żyjących obiektów
  • Poprawiona ergonomia zbierania śmieci, dzięki czemu równoczesne usuwanie śmieci jest bardziej terminowe, co sprawia, że ​​zdarzenia GC_FOR_ALLOC są niezwykle rzadkie w typowych przypadkach użycia

Ulepszenia w zakresie rozwoju i debugowania

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

Wsparcie dla profilera próbkowania

Historycznie deweloperzy używali narzędzia Traceview (przeznaczonego do śledzenia wykonywania aplikacji) jako profilera. Chociaż Traceview dostarcza użytecznych informacji, jego wyniki w Dalvik zostały wypaczone przez narzut na metodę wywołania, a użycie narzędzia wyraźnie 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 wykonywania aplikacji bez znacznego spowolnienia. Obsługa próbkowania została dodana do Traceview dla Dalvik w wydaniu KitKat.

Obsługa większej liczby funkcji debugowania

ART obsługuje wiele nowych opcji debugowania, szczególnie w funkcjach związanych z monitorowaniem i wyrzucaniem elementów bezużytecznych. Na przykład możesz:

  • Zobacz, jakie blokady są przechowywane w śladach stosu, a następnie przejdź do wątku, który ma blokadę.
  • Zapytaj, ile jest aktywnych instancji danej klasy, poproś o zobaczenie instancji i zobacz, jakie referencje utrzymują aktywny obiekt.
  • Filtruj zdarzenia (takie jak punkt przerwania) dla określonej instancji.
  • Zobacz wartość zwracaną przez metodę po jej zakończeniu (przy użyciu zdarzeń „method-exit”).
  • Ustaw punkt obserwacyjny pola, aby zawiesić wykonywanie programu, gdy określone pole jest dostępne i/lub modyfikowane.

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

ART zapewnia jak najwięcej kontekstu i szczegółów, gdy wystąpią wyjątki środowiska wykonawczego. ART udostępnia rozszerzone szczegóły wyjątków dla java.lang.ClassCastException , java.lang.ClassNotFoundException i java.lang.NullPointerException . (W późniejszych wersjach Dalvik udostępniono rozszerzone szczegóły wyjątków dla java.lang.ArrayIndexOutOfBoundsException i java.lang.ArrayStoreException , które teraz obejmują rozmiar tablicy i przesunięcie poza granice, a ART również to robi.)

Na przykład java.lang.NullPointerException zawiera teraz informacje o tym, co aplikacja próbowała zrobić ze wskaźnikiem o wartości null, 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 również ulepszone informacje kontekstowe w natywnych raportach o awariach aplikacji, uwzględniając zarówno informacje o Javie, jak i natywnym stosie.

Zgłaszanie problemów

Jeśli napotkasz jakiekolwiek problemy, które nie są związane z problemami JNI aplikacji, zgłoś je za pomocą narzędzia Android Open Source Project Issue Tracker . 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 odwzorowujący problem.