Android runtime (ART) jest zarządzanym środowiskiem wykonawczym używanym przez aplikacje i niektóre usługi systemowe na Androida. Sztuka i jej poprzednik Dalvik zostały pierwotnie stworzone specjalnie dla projektu Android. ART jako runtime wykonuje Format DalvikExecutable i specyfikację bajtowego kodu Dex.
ART i Dalvik są kompatybilnymi środowiskami uruchomionymi z kodem bajtowym Dex, więc aplikacje opracowane dla Dalvika powinny działać podczas uruchamiania Z ART. Jednak niektóre techniki pracujące nad Dalvikiem nie działają na sztukę. Aby uzyskać informacje na temat najważniejszych problemów, zobacz Verifyingapp behavior on the Android runtime (ART).
cechy sztuki
oto niektóre z głównych cech zaimplementowanych przez sztukę.
kompilacja przed czasem (AOT)
ART wprowadza kompilację przed czasem (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ą narzędzia on-devicedex2oat. To narzędzie akceptuje pliki DEX jako wejście i generujekompilowany plik wykonywalny aplikacji dla urządzenia docelowego. Narzędzie powinno być w stanie skompilować wszystkie poprawne pliki DEX bez trudności. Jednak niektóre narzędzia post-processingtools wytwarzają nieprawidłowe pliki, które mogą być tolerowane przez Dalvik, ale nie mogą zostać skompilowane przez art. Aby uzyskać więcej informacji, zobacz Adresinggarbage Collection Issues.
Ulepszona funkcja garbage collection
funkcja Garbage collection (GC) jest bardzo zasobochłonna, co może negatywnie wpływać na wydajność aplikacji,co powoduje niestabilny wyświetlacz, słabą responsywność interfejsu użytkownika i inne problemy. Sztuka poprawia zbieranie śmieci na kilka sposobów:
- głównie współbieżna konstrukcja z pojedynczą pauzą GC
- współbieżne 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 dla specjalnego przypadku czyszczenia niedawno przydzielonych, krótkotrwałych obiektów
- ulepszona ergonomia zbierania śmieci, dzięki czemu współbieżne zbiory śmieci są bardziej terminowe, co sprawia, że
GC_FOR_ALLOC
zdarzenia są niezwykle rzadkie w typowych przypadkach użycia
ulepszenia rozwoju i debugowania
sztuka oferuje szereg funkcje usprawniające tworzenie aplikacji i debugowanie.
wsparcie dla sampling profiler
historycznie Programiści używali narzędzia Traceviewtool (zaprojektowanego do wykonywania aplikacji tracingapplication) jako profilera. Podczas gdy Traceview dostarcza użytecznych informacji, jego wyniki w Dalvik zostały wypaczone przez narzut wywołania danej metody,a użycie narzędzia znacząco wpływa na wydajność w czasie pracy.
ART dodaje wsparcie dla dedykowanego profilera próbkowania, który nie ma tych ograniczeń. Daje to bardziej dokładny wgląd w wykonywanie aplikacji bez znaczącego spowolnienia. Wsparcie próbkowania zostało dodane do Traceview forDalvik 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 zbieraniem kart. Na przykład możesz:
- Zobacz, jakie blokady są trzymane w śladach stosu, a następnie przejdź do wątku, który trzyma blokadę.
- zapytaj, ile aktywnych instancji danej klasy istnieje, poproś, aby zobaczyć instancje i zobaczyć, jakie odwołania utrzymują obiekt NA ŻYWO.
- Filtruj zdarzenia (takie jak punkt przerwania) dla określonej instancji.
- Patrz wartość zwrócona przez metodę przy jej zakończeniu (przy pomocy zdarzeń „method-exit”).
- Ustaw field watchpoint, aby zawiesił wykonywanie programu, gdy dostęp do określonego pola i/lub jego modyfikacja.
ulepszone szczegóły diagnostyczne w wyjątkach i raportach o awariach
grafika daje jak najwięcej kontekstu i szczegółów, jak to możliwe, gdy występują wyjątki w czasie wykonywania. Grafika zawiera rozszerzone szczegóły wyjątków dla java.lang.ClassCastException
,java.lang.ClassNotFoundException
i java.lang.NullPointerException
.(Późniejsze wersje Dalvika dostarczyły rozszerzone szczegóły wyjątków dla java.lang.ArrayIndexOutOfBoundsException
i java.lang.ArrayStoreException
, które teraz zawierają rozmiar tablicy i offset poza granicami, a Art również to robi.)
na przykład java.lang.NullPointerException
pokazuje teraz informacje o tym,co aplikacja próbowała zrobić ze wskaźnikiem null, takie jak Pole, do którego aplikacja próbowała napisać, lub metoda, którą próbowała zadzwonić. Oto kilka typowych przykładów:
java.lang.NullPointerException: Attempt to write to field 'intandroid.accessibilityservice.AccessibilityServiceInfo.flags' on a null objectreference
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 awarii aplikacji, włączając zarówno informacje Java, jak i natywne informacje o stosie.