- Dalvik hoạt động bằng cách sử dụng biên dịch JIT, dịch mã trong khi ứng dụng đang chạy.
- ART tối ưu hóa hệ thống bằng cách sử dụng biên dịch AOT, thực hiện quy trình này trong quá trình cài đặt.
- Cả hai môi trường đều sử dụng định dạng tệp DEX, đảm bảo khả năng tương thích giữa các phiên bản.
- Việc chuyển sang công nghệ ART đã giúp giảm tiêu hao pin và cải thiện độ mượt mà của hệ thống.
Nếu bạn từng thắc mắc điều gì thực sự xảy ra bên trong điện thoại khi bạn mở một ứng dụng, câu trả lời nằm ở môi trường thời gian chạy. Trong hệ sinh thái Android, chúng ta đã chuyển từ kiến trúc dựa trên máy ảo Dalvik sang một hệ thống mạnh mẽ hơn nhiều gọi là Android Runtime, hay còn gọi là ART. Về cơ bản, ART chịu trách nhiệm dịch mã do lập trình viên viết thành các lệnh mà phần cứng của thiết bị có thể hiểu được mà không gây lỗi.
Để hiểu điều này, điều quan trọng cần biết là Android không chạy Java một cách trực tiếp; thay vào đó, nó sử dụng một phiên bản tùy chỉnh . Mọi thứ bắt đầu từ mã nguồn, được chuyển đổi thành mã byte và cuối cùng ở định dạng cụ thể gọi là DEX. Tùy thuộc vào phiên bản Android của bạn cũ hay mới hơn, đường dẫn mà mã này đi để thực thi sẽ thay đổi đáng kể, ảnh hưởng đến những thứ hàng ngày như thời lượng pin và tốc độ tải ứng dụng.
Di sản của Dalvik: Kỷ nguyên sản xuất đúng thời điểm
Dalvik là một trụ cột nền tảng ngay từ những ngày đầu của Android. Mục tiêu của nó rất rõ ràng: cho phép các ứng dụng được viết bằng Java chạy trên các thiết bị có tài nguyên rất hạn chế . Không giống như máy ảo Java tiêu chuẩn, Dalvik được tối ưu hóa để sử dụng ít bộ nhớ hơn và chạy nhiều phiên bản đồng thời, ủy thác việc quản lý luồng cho nhân Linux.
Tính năng chính của Dalvik là biên dịch Just-In-Time (JIT) . Điều này có nghĩa là mã được dịch sang ngôn ngữ máy chính xác khi người dùng tương tác với ứng dụng. Để tránh lặp lại tác vụ tốn thời gian này mỗi lần, Dalvik đã tạo ra các tệp gọi là ODEX (Optimized DEX) , lưu trữ các phần đã được dịch trong bộ nhớ cache. Vấn đề là quá trình biên dịch liên tục này tiêu tốn chu kỳ CPU và do đó, sử dụng nhiều năng lượng hơn.
Android Runtime (ART): Bước tiến vượt bậc hướng tới Ahead-Of-Time
Bắt đầu từ Android 5.0 Lollipop, ART đã hoàn toàn thay thế vai trò của nó. Sự khác biệt lớn là ART triển khai biên dịch trước thời điểm cài đặt (Ahead-Of-Time - AOT) . Thay vì chờ bạn mở ứng dụng, ART sẽ thực hiện các tác vụ nặng nhọc trong quá trình cài đặt. Nó sử dụng một công cụ có tên dex2oat để chuyển đổi các tệp DEX thành các tệp thực thi ELF (Executable and Linkable Format), định dạng gốc của Linux.
Nhờ phương pháp này, khi bạn chạm vào biểu tượng ứng dụng, hệ thống không cần phải biên dịch bất cứ thứ gì; nó chỉ đơn giản là đọc tệp ELF và thực thi nó. Điều này có nghĩa là bộ xử lý hoạt động ít hơn, pin sử dụng được lâu hơn và các ứng dụng hoạt động mượt mà hơn nhiều. Tuy nhiên, có một sự đánh đổi nhỏ: quá trình cài đặt ứng dụng mất nhiều thời gian hơn một chút và chúng chiếm nhiều dung lượng lưu trữ hơn so với Dalvik.
So sánh kỹ thuật và những cải tiến chính
Mặc dù cả hai môi trường đều tương thích và chạy cùng một mã bytecode DEX, ART đã đưa ra những cải tiến giúp hệ thống hoạt động nhanh hơn đáng kể. Một trong những cải tiến quan trọng nhất là thu gom rác (GC) . Trong Dalvik, bộ thu gom rác thường gây ra những hiện tượng tạm dừng hoặc "giật" khó chịu trong giao diện (hiện tượng lag khét tiếng). ART đã thiết kế lại hệ thống này với chủ yếu là hệ thống song song , giúp các lần tạm dừng không phụ thuộc vào lượng bộ nhớ được sử dụng.
- Gỡ lỗi nâng cao: ART cho phép các nhà phát triển xem các luồng đang giữ những khóa nào và theo dõi các thể hiện của lớp với độ chính xác cao hơn nhiều.
- Chẩn đoán chính xác: Hiện nay, khi một ứng dụng gặp sự cố, báo cáo lỗi sẽ chi tiết hơn nhiều, đặc biệt là trong các trường hợp sau: NullPulumException.
- Quản lý bộ nhớ: Không giống như Dalvik, vốn sử dụng bộ nhớ đệm không thể phân trang, ART sử dụng bộ nhớ RAM. Có thể phân trang.Tối ưu hóa việc sử dụng phần cứng.
Quy trình đóng gói: Từ mã nguồn đến tệp APK
Để bất kỳ môi trường nào trong số này hoạt động, mã phải trải qua một quy trình lắp ráp. Đầu tiên, trình biên dịch Java tạo ra các tệp .class, sau đó công cụ dex chuyển đổi chúng thành một tệp classes.dex duy nhất. Tệp này là cốt lõi của APK và là thứ mà ART hoặc Dalvik sẽ xử lý.
Các công cụ như aapt được sử dụng để đóng gói tài nguyên, và zipalign tối ưu hóa việc căn chỉnh dữ liệu, đảm bảo bộ xử lý truy cập bộ nhớ hiệu quả nhất có thể. Khi tệp APK đến thiết bị, điều kỳ diệu sẽ xảy ra: nếu có ART, tệp ELF sẽ được tạo; nếu có Dalvik, tệp ODEX sẽ bắt đầu được tạo ngay lập tức.
Những thông tin thú vị về ROM và quá trình deodexing
Trong thế giới ROM tùy chỉnh, các thuật ngữ odex và deodex rất phổ biến . Vì tệp ODEX phụ thuộc vào phần cứng và hệ thống cụ thể nơi nó được tạo ra, nên nó không thể dễ dàng chuyển từ điện thoại này sang điện thoại khác. Để sửa đổi một ứng dụng mà không làm sập hệ thống, các nhà phát triển thực hiện quy trình deodexing , bao gồm việc tích hợp tệp được tối ưu hóa vào APK để dễ dàng thao tác hơn.
Hệ sinh thái Android đã phát triển từ một máy ảo linh hoạt nhưng tiêu tốn nhiều năng lượng thành một môi trường chạy được tối ưu hóa, ưu tiên trải nghiệm người dùng. Trong khi Dalvik tập trung vào tính linh hoạt của việc dịch mã trong thời gian thực, ART đã tối đa hóa việc sử dụng phần cứng thông qua biên dịch trước , đảm bảo phần mềm ổn định hơn, nhanh hơn và tiết kiệm năng lượng hơn.
Index



