ART: τι είναι, περιβάλλον εκτέλεσης και πώς λειτουργεί

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-04-16 Χρόνος ανάγνωσης: 10 λεπ

Android Runtime (ART) — το περιβάλλον εκτέλεσης εφαρμογών Android, που εισήχθη στο Android 5.0 Lollipop ως αντικατάσταση του Dalvik. Η κύρια καινοτομία — η εκ των προτέρων μεταγλώττιση AOT του bytecode DEX σε εγγενή κώδικα μηχανής απευθείας κατά την εγκατάσταση της εφαρμογής, η οποία εξάλειψε το πολυετές πρόβλημα προθέρμανσης του μεταγλωττιστή JIT. Σύμφωνα με Google, 2024, το ART παρέχει αύξηση απόδοσης έως 20–30% σε σύγκριση με το Dalvik, διατηρώντας πλήρη συμβατότητα προς τα πίσω με τη μορφή DEX.

Κύρια σημεία

  • ART — περιβάλλον εκτέλεσης Android με μεταγλώττιση AOT, που αντικατέστησε το Dalvik στο Android 5.0.
  • Μεταγλώττιση AOT μετατρέπει το bytecode DEX σε εγγενή κώδικα μηχανής κατά την εγκατάσταση της εφαρμογής.
  • Υβριδική λειτουργία JIT+AOT (από Android 7.0) επιταχύνει την εγκατάσταση και διατηρεί υψηλή απόδοση.
  • Συλλογή απορριμμάτων στο ART βελτιώθηκε: οι παύσεις μειώθηκαν σε 2–3 ms χάρη στον συλλέκτη γενεών.
  • Το ART διατηρεί συμβατότητα προς τα πίσω με το bytecode DEX του Dalvik και υποστηρίζει λειτουργίες Java 8+.

Τι είναι το ART;

Android Runtime (ART) — το περιβάλλον εκτέλεσης εφαρμογών που μεταγλωττίζει το bytecode DEX σε εγγενή κώδικα μηχανής πριν από την εκτέλεση. Σε αντίθεση με το Dalvik, το οποίο χρησιμοποιούσε μεταγλώττιση Just-In-Time κατά την εκτέλεση, το ART εκτελεί μεταγλώττιση Ahead-Of-Time (AOT) κατά την εγκατάσταση του APK. Αυτή η θεμελιώδης αλλαγή αρχιτεκτονικής οδήγησε σε σημαντική επιτάχυνση των εφαρμογών και μείωση της κατανάλωσης ενέργειας.

Το ART εμφανίστηκε για πρώτη φορά ως πειραματική επιλογή στο Android 4.4 KitKat. Οι προγραμματιστές μπορούσαν να το ενεργοποιήσουν στις ρυθμίσεις προγραμματιστή και να δοκιμάσουν τις εφαρμογές τους. Στο Android 5.0 Lollipop, το ART έγινε το προεπιλεγμένο περιβάλλον εκτέλεσης και το Dalvik αφαιρέθηκε εντελώς από την πλατφόρμα. Μέχρι την κυκλοφορία του Android 7.0 Nougat, το ART απέκτησε υβριδική λειτουργία μεταγλώττισης.

Ιστορία ανάπτυξης

Η απόφαση αντικατάστασης του Dalvik με ART δεν ήταν ξαφνική. Οι εργασίες για το νέο περιβάλλον ξεκίνησαν το 2012, όταν η Google συνειδητοποίησε τους περιορισμούς της προσέγγισης JIT. Κύριος στόχοι: επιτάχυνση εκκίνησης εφαρμογών, μείωση φόρτου επεξεργαστή και μείωση κατανάλωσης ενέργειας. Την ανάπτυξη ηγήθηκε η ομάδα Android Runtime Group, η οποία είχε προηγουμένως εργαστεί στις βελτιστοποιήσεις του Dalvik.

Αρχιτεκτονικές αλλαγές

Το ART χρησιμοποιεί την ίδια αρχιτεκτονική καταχωρητών με το Dalvik, αλλά με έναν πλήρως επανασχεδιασμένο μεταγλωττιστή. Αντί για διερμηνέα και μεταγλωττιστή JIT, το ART περιλαμβάνει τον μεταγλωττιστή AOT dex2oat, ο οποίος μετατρέπει τα αρχεία DEX σε δυαδικά ELF κατά την εγκατάσταση. Ως αποτέλεσμα, η εφαρμογή στο ART ξεκινά αμέσως με εγγενή απόδοση, χωρίς φάση προθέρμανσης.

Αρχιτεκτονική ART: από το Dalvik στο νέο περιβάλλον

ART διατήρησε τις βασικές αρχές του Dalvik: απομόνωση εφαρμογών μέσω ξεχωριστών διεργασιών, αρχιτεκτονική καταχωρητών και υποστήριξη μορφής DEX. Ωστόσο, η εσωτερική υλοποίηση ξαναγράφτηκε πλήρως. Αντί για τον διερμηνέα Dalvik, το ART περιλαμβάνει τρεις λειτουργίες εκτέλεσης: διερμηνέα, μεταγλωττιστή JIT και μεταγλωττιστή AOT dex2oat. Η επιλογή λειτουργίας εξαρτάται από το στάδιο του κύκλου ζωής της εφαρμογής.

Το βασικό στοιχείο του ART — dex2oat (dalvik executable to optimized android translator). Αυτό το εργαλείο εκτελείται κατά την εγκατάσταση της εφαρμογής (από Android 7.0 — επίσης κατά τη βελτιστοποίηση παρασκηνίου). Το dex2oat διαβάζει αρχεία DEX από το APK, βελτιστοποιεί το bytecode και δημιουργεί ένα αρχείο OAT — ένα δυαδικό ELF με εγγενή κώδικα. Τα αρχεία OAT αποθηκεύονται στον κατάλογο /data/dalvik-cache/.

bash
# Έλεγχος αρχείων OAT στη συσκευή
adb shell ls -la /data/dalvik-cache/arm64/

# Αναγκαστική μεταγλώττιση της εφαρμογής
adb shell cmd package compile -m speed com.example.app

Στοιχεία του ART

Το σύστημα ART αποτελείται από πολλές διασυνδεδεμένες μονάδες. Ο μεταγλωττιστής dex2oat είναι υπεύθυνος για τη δημιουργία εγγενούς κώδικα. Ο συλλέκτης απορριμμάτων (GC) διαχειρίζεται την απελευθέρωση μνήμης. Ο διερμηνέας εκτελεί σπάνια καλούμενο κώδικα χωρίς μεταγλώττιση. Ο προφιλαριστής παρακολουθεί hot μεθόδους για υβριδική μεταγλώττιση. Κάθε μονάδα μπορεί να λειτουργεί ανεξάρτητα, καθιστώντας το ART ευέλικτο και επεκτάσιμο.

Υβριδική μεταγλώττιση: JIT + AOT + προφίλ

Από το Android 7.0 Nougat, το ART χρησιμοποιεί υβριδική προσέγγιση στη μεταγλώττιση, συνδυάζοντας τα πλεονεκτήματα των JIT και AOT. Κατά την εγκατάσταση της εφαρμογής, το ART δεν εκτελεί πλέον πλήρη μεταγλώττιση AOT — αντί αυτού, η εφαρμογή ξεκινά σε λειτουργία διερμηνείας με μεταγλώττιση JIT των hot μεθόδων. Αυτό μειώνει τον χρόνο εγκατάστασης και τον καταλαμβανόμενο χώρο.

Παράλληλα λειτουργεί προφιλαριστής παρασκηνίου (background profiler). Συλλέγει στατιστικά εκτέλεσης: ποιες μέθοδοι καλούνται συχνότερα, ποιοι κλάδοι κώδικα εκτελούνται, ποιες κλάσεις φορτώνονται. Μετά τη συλλογή επαρκών δεδομένων (συνήθως μετά από 2–3 εκκινήσεις της εφαρμογής), το ART εκτελεί το dex2oat στο παρασκήνιο και μεταγλωττίζει μόνο προφιλαρισμένες hot μεθόδους σε εγγενή κώδικα.

Λειτουργίες μεταγλώττισης

ART υποστηρίζει πολλές λειτουργίες μεταγλώττισης που διαχειρίζονται μέσω system_server. Η λειτουργία "speed" μεταγλωττίζει όλες τις μεθόδους σε AOT (μέγιστη απόδοση, μεγάλη εγκατάσταση). Η λειτουργία "speed-profile" μεταγλωττίζει μόνο προφιλαρισμένες hot μεθόδους (ισορροπία ταχύτητας και μεγέθους). Η λειτουργία "verify" μόνο επαληθεύει το bytecode χωρίς μεταγλώττιση (ελάχιστος χώρος, διερμηνεία). Από προεπιλογή χρησιμοποιείται speed-profile — βέλτιστο για τις περισσότερες εφαρμογές.

ΛειτουργίαΜεταγλώττισηΧρόνος εγκατάστασηςΑπόδοση
speedΠλήρης AOTΜεγάλοςΜέγιστη
speed-profileΠροφιλαρισμένη AOTΓρήγοροςΥψηλή
verifyΧωρίς μεταγλώττισηΆμεσοςΔιερμηνεία
spaceΕλάχιστη AOTΜέτριοςΜέτρια

Προφιλαριστής ART

Ο προφιλαριστής συλλέγει δεδομένα εκτέλεσης σε ειδικά αρχεία .prof. Κάθε εφαρμογή αποθηκεύει το προφίλ της στο /data/misc/profiles/. Κατά την επίτευξη του ορίου (συνήθως 1000 δείγματα), ο προφιλαριστής εκτελεί το dex2oat για μεταγλώττιση των αναγνωρισμένων hot μεθόδων. Τα προφίλ διατηρούνται μεταξύ των ενημερώσεων εφαρμογών, επιταχύνοντας την εκ νέου βελτιστοποίηση μετά από ενημερώσεις OTA συστήματος.

Συλλογή απορριμμάτων στο ART

Η συλλογή απορριμμάτων στο ART έχει βελτιωθεί ριζικά σε σύγκριση με το Dalvik. Αντί για τον μονής γραμμής Concurrent Mark and Sweep (CMS), το ART χρησιμοποιεί συλλέκτη γενεών με πολλές βελτιστοποιήσεις: moving collector (συμπίεση σωρού), large object space (ξεχωριστή αποθήκευση μεγάλων αντικειμένων) και concurrent compaction (παράλληλη συμπίεση).

Μια τυπική παύση GC στο ART είναι 2–3 ms έναντι 5–10 ms στο Dalvik. Αυτό κατέστη δυνατό χάρη σε διάφορους μηχανισμούς. Πρώτον, το ART χρησιμοποιεί read-barrier αντί stop-the-world για ταυτόχρονες φάσεις. Δεύτερον, ο συλλέκτης γενεών επεξεργάζεται μόνο τη νέα γενιά αντικειμένων στους περισσότερους κύκλους, χωρίς να επηρεάζει ολόκληρο τον σωρό. Τρίτον, το large object space (LOS) εκχωρείται ξεχωριστά και δεν συμμετέχει σε κανονικούς κύκλους GC.

java
// Ενεργοποίηση αρχείων καταγραφής GC για αποσφαλμάτωση
System.logV("ART", "GC trigger: allocation failed");

// Αναγκαστική κλήση GC (δεν συνιστάται σε παραγωγή)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    Debug.getRuntimeIStats();
}

Διαρροές μνήμης στην εποχή του ART

Παρά τη βελτιωμένη GC, οι διαρροές μνήμης παραμένουν ένα επίκαιρο πρόβλημα. Μια αιτία ειδική για το ART — φόρτωση εγγενών βιβλιοθηκών μέσω JNI χωρίς σωστή απελευθέρωση. Εάν ο εγγενής κώδικας εκχωρεί μνήμη μέσω malloc αλλά δεν καλεί free, το ART δεν μπορεί να ελευθερώσει αυτή τη μνήμη — βρίσκεται εκτός του διαχειριζόμενου σωρού. Το εργαλείο AddressSanitizer στο Android NDK βοηθά στον εντοπισμό τέτοιων διαρροών.

ART vs Dalvik: συγκριτική ανάλυση

ART και Dalvik — δύο θεμελιωδώς διαφορετικές υλοποιήσεις της ίδιας εργασίας: εκτέλεση εφαρμογών Android. Οι διαφορές επηρεάζουν όλα τα επίπεδα: από τη μεταγλώττιση έως τη διαχείριση μνήμης. Παρακάτω παρουσιάζεται μια σύγκριση βασικών παραμέτρων απόδοσης και συμβατότητας.

Το κύριο πλεονέκτημα του ART — εξάλειψη της προθέρμανσης JIT. Στο Dalvik, η εφαρμογή μπορούσε να επιβραδύνεται τα πρώτα 3–10 δευτερόλεπτα ενώ ο JIT μεταγλώττιζε hot μεθόδους. Στο ART, όλες οι μέθοδοι είναι ήδη μεταγλωττισμένες σε εγγενή κώδικα (ή θα μεταγλωττιστούν στο παρασκήνιο). Αυτό είναι ιδιαίτερα αισθητό σε παιχνίδια και εφαρμογές με βαριά διεπαφή: η διαφορά στα fps μπορεί να φτάσει 15–20% υπέρ του ART.

ΠαράμετροςDalvikART
ΜεταγλώττισηJIT (κατά την εκτέλεση)AOT + υβριδική (κατά την εγκατάσταση)
Χρόνος εκκίνησης3–10 δ (προθέρμανση)Άμεσος
Μέγεθος APK~6–7 MB (DEX)+20% (OAT)
Παύσεις GC5–10 ms2–3 ms
Κατανάλωση ενέργειαςΥψηλότερη (JIT θερμαίνει CPU)Χαμηλότερη (εγγενής κώδικας)

Συμβατότητα

Όλες οι εφαρμογές που γράφτηκαν για Dalvik λειτουργούν σε ART χωρίς αλλαγές. Η Google εγγυάται πλήρη συμβατότητα προς τα πίσω σε επίπεδο bytecode DEX. Εξαίρεση — κώδικας που χρησιμοποιεί Dalvik-specific εσωτερικό API μέσω αντανάκλασης: μέλη της κλάσης dalvik.system.DexFile που επισημαίνονται με @hide στο Android SDK. Τέτοιος κώδικας πρέπει να ενημερωθεί για χρήση δημόσιων API.

Υποστήριξη Java 8 και desugaring

ART έγινε το πρώτο περιβάλλον εκτέλεσης Android με εγγενή υποστήριξη λειτουργιών Java 8. Από το Android 7.0, το ART περιλαμβάνει desugaring — τη διαδικασία μετατροπής κατασκευών Java 8 (lambdas, method references, Stream API) σε ισοδύναμο κώδικα Java 7. Αυτό επιτρέπει τη χρήση σύγχρονης σύνταξης χωρίς απώλεια συμβατότητας με παλαιότερες συσκευές.

Το desugaring εκτελείται από τον μεταγλωττιστή D8 και λειτουργεί ως εξής. Ο πηγαίος κώδικας με lambda μετατρέπεται σε συνθετική μέθοδο εντός της ίδιας κλάσης και η lambda αντικαθίσταται με κλήση invoke-custom. Το runtime του ART υποστηρίζει την εντολή invoke-custom, που προστέθηκε ειδικά για Java 8. Σε συσκευές με Android 6.0 και παλαιότερες, τα lambdas desugar-άρονται σε ανώνυμες κλάσεις.

java
// Lambda Java 8 — desugaring στο ART
button.setOnClickListener(v -> handleClick(v));

// Μετά το desugaring (ισοδύναμο σε Java 7)
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        handleClick(v);
    }
});

Περιορισμοί desugaring

Δεν υποστηρίζονται όλες οι λειτουργίες Java 8 από το desugaring. Το API java.time (ημερομηνία και ώρα) είναι προσβάσιμο μόνο μέσω desugar_jdk_libs — μιας πρόσθετης βιβλιοθήκης που προστίθεται στο build.gradle. Το Stream API απαιτεί επίσης desugar_jdk_libs. Τα java.util.function και Optional λειτουργούν χωρίς πρόσθετες εξαρτήσεις. Η πλήρης υποστήριξη Java 8 είναι διαθέσιμη σε συσκευές με Android 8.0 και νεότερες χωρίς desugaring.

Βελτιστοποίηση εφαρμογών για ART

Παρόλο που το ART είναι συμβατό προς τα πίσω, ορισμένες πρακτικές βελτιστοποίησης βελτιώνουν την απόδοση ακριβώς σε αυτό το περιβάλλον. Η κύρια σύσταση — ελαχιστοποίηση της αντανάκλασης. Το ART μεταγλωττίζει μεθόδους ορατές στο στάδιο μεταγλώττισης σε άμεση κλήση κώδικα μηχανής. Η Αντανάκλαση αναγκάζει το ART να δημιουργεί πρόσθετα stub, επιβραδύνοντας την εκτέλεση κατά 10–15%.

Από το Android 9.0, το ART υποστηρίζει App Startup Optimization. Ο προγραμματιστής μπορεί να επισημάνει κλάσεις αρχικοποίησης στο manifest μέσω <initialization> και το ART θα τις προφορτώσει κατά την εκκίνηση της εφαρμογής. Αυτό μειώνει τον χρόνο εκκίνησης κατά 5–15% για εφαρμογές με πολλά πρόσθετα ή βιβλιοθήκες.

xml
<!-- App Startup Optimization στο AndroidManifest.xml -->
<application>
    <profileable
        android:shell="true"
        android:enable="true" />
</application>

Μέτρηση απόδοσης

Για τη μέτρηση απόδοσης σε ART, χρησιμοποιήστε systrace και perfetto. Το Systrace δείχνει τον χρόνο μεταγλώττισης dex2oat, τη συχνότητα GC και την ταχύτητα απόδοσης καρέ. Το Perfetto παρέχει πιο λεπτομερείς πληροφορίες: κατανομή νημάτων, χρόνο μεταβάσεων JNI, φόρτωση εγγενών βιβλιοθηκών. Εκτέλεση: adb shell perfetto -o /data/misc/perfetto-traces/trace.perfetto -t 10s sched freq idle am wm.

Συχνές ερωτήσεις

Τι είναι το ART στο Android;

ART (Android Runtime) — το περιβάλλον εκτέλεσης εφαρμογών Android που μεταγλωττίζει τον κώδικα της εφαρμογής σε κώδικα μηχανής κατά την εγκατάσταση. Αυτό επιταχύνει την εκκίνηση και λειτουργία των εφαρμογών σε σύγκριση με το παλιό περιβάλλον Dalvik.

Σε τι διαφέρει το ART από το Dalvik;

ART μεταγλωττίζει τον κώδικα εκ των προτέρων (AOT) κατά την εγκατάσταση της εφαρμογής, ενώ το Dalvik τον μεταγλώττιζε τμηματικά κατά την εκτέλεση (JIT). Επομένως, στο ART οι εφαρμογές ξεκινούν ταχύτερα και καταναλώνουν λιγότερη ενέργεια.

Πώς ελέγχω αν η εφαρμογή λειτουργεί σε ART;

Εκτελέστε adb shell getprop και βρείτε την ιδιότητα persist.sys.dalvik.vm.lib.2. Η τιμή "libart.so" σημαίνει ART, "libdvm.so" — Dalvik. Σε όλες τις συσκευές με Android 5.0+, το περιβάλλον εκτέλεσης είναι ART.

Επηρεάζει το ART το μέγεθος APK;

Ελαφρώς. Η ίδια η εφαρμογή παραμένει σε μορφή APK με αρχεία DEX. Το ART δημιουργεί ένα πρόσθετο αρχείο OAT στο /data/dalvik-cache/, το οποίο καταλαμβάνει 10–20% περισσότερο χώρο από το αρχικό DEX, αλλά αυτή η αποθήκευση δεν περιλαμβάνεται στο μέγεθος APK.

Υποστηρίζει το ART Java 8;

Ναι, το ART υποστηρίζει τις περισσότερες λειτουργίες Java 8 μέσω του μηχανισμού desugaring. Τα lambdas, method references και functional interfaces λειτουργούν σε όλες τις συσκευές με Android 5.0+. Για Stream API και java.time απαιτείται η βιβλιοθήκη desugar_jdk_libs.

Σύνοψη

  • ART — περιβάλλον εκτέλεσης Android που αντικατέστησε το Dalvik στο Android 5.0 Lollipop με θεμελιωδώς διαφορετική προσέγγιση στη μεταγλώττιση.
  • Μεταγλώττιση AOT dex2oat μετατρέπει το bytecode DEX σε εγγενές δυαδικό ELF κατά την εγκατάσταση της εφαρμογής.
  • Υβριδική λειτουργία JIT + AOT (Android 7.0+) επιταχύνει την εγκατάσταση και προσαρμόζεται στην πραγματική χρήση.
  • Ο συλλέκτης γενεών του ART μείωσε τις παύσεις GC από 5–10 ms σε 2–3 ms.
  • Ο προφιλαριστής συλλέγει δεδομένα από 2–3 εκκινήσεις και ξεκινά μεταγλώττιση παρασκηνίου hot μεθόδων.
  • Το desugaring Java 8 επιτρέπει τη χρήση lambdas και Stream API σε συσκευές με Android 5.0+.
  • Για βέλτιστη απόδοση στο ART, ελαχιστοποιήστε την αντανάκλαση και χρησιμοποιήστε App Startup Optimization.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης