Chủ Nhật, 17 tháng 11, 2013

Tìm hiểu thêm về Android Runtime (ART) trong Android 4.4 và lợi ích của nó khi thay thế Dalvik

Android_RunTime_Dalvik_VM.

Trong suốt 5 năm ra đời và phát triển, hầu hết mọi thành phần của Android đều đã ít nhiều được thay thế, cập nhật mới hay thậm chí là thay đổi hoàn toàn. Tuy nhiên, có một thứ cực kì quan trọng, đó là bộ máy ảo Dalvik dùng để chạy ứng dụng Android thì vẫn được giữ nguyên gần như so với ban đầu. Giờ đây, trong Android 4.4 KitKat, Google đã ra mắt một giải pháp thay thế cho anh chàng Dalvik già cỗi, đó chính là Android Runtime (ART). Trong bài này, mình sẽ giới thiệu thêm cho các bạn những thông tin về ART và lợi ích của nó với Android là gì.

Dalvik và ART là gì?

Hiện nay, các ứng dụng Java sau khi viết xong chỉ được biên dịch (compile) một phần bởi lập trình viên. Phần mã biên dịch này sau đó sẽ phải đi qua một trình phiên dịch (interpreter) để trở thành mã máy (native code) phù hợp với CPU và thiết bị của người dùng. Quá trình này tốn thời gian hơn và không thực sự hiệu quả, nhưng bù lại lập trình viên có thể viết app chỉ một lần và đem nó lên nhiều máy để chạy.

Java_VM.

Trên Windows, Mac hay Linux, chúng ta có một thứ gọi là Java Virtual Machine để thực hiện công việc trên. Còn với Android, Dalvik chính là trình phiên dịch và nó đã có mặt từ những buổi đầu mà hệ điều hành này ra đời. Dalvik do kĩ sư Dan Bornstein làm ra và nó được đặt tên theo một làng chài ở Iceland. Đây thực chất là một phần mềm mã nguồn mở và nó nằm ở trong khu vực bao gồm các thư viện cốt lõi cần để Android chạy. Ngoài ứng dụng thì vài thành phần khác của Android cũng phải dùng đến Dalvik.

Chính nhờ Dalvik mà chúng ta chỉ có một app duy nhất nhưng vẫn có thể chạy trên smartphone, tablet, Smart TV, thiết bị nhúng... với nhiều loại CPU khác nhau và từ các hãng khác nhau (tất nhiên việc tối ưu hóa giao diện, tính năng là câu chuyện khác, nhưng cơ bản là chạy được).

Vấn đề với việc phiên dịch bằng Dalvik đó là nó chậm! Chính sự xuất hiện của interpreter thường làm cho hiệu năng ứng dụng thấp hơn so với các phần mềm dùng trực tiếp mã đã được biên dịch sẵn. Trước đây người ta từng thử nghiệm rằng một phần mềm được viết bằng JavaScript (cần phải được phiên dịch trước khi xử lí) thì chậm hơn khoảng 20 lần so với một phần mềm được viết bằng mã native. Trong nhiều trường hợp, nhất là với những CPU hiện đại có sức mạnh xử lí tốt thì sự khác biệt này không đáng kể. Tuy nhiên, với những phần mềm nặng thì chúng ta sẽ thấy nó một cách rõ rệt. Android hiện nay chậm chạp cũng một phần là do Dalvik. Và việc bắt vi xử lí chạy lâu hơn cũng là nguyên nhân khiến hệ thống tiêu thụ nhiều điện hơn.

Android Runtime – ART

Google biết về Dalvik, tất nhiên, đó là lý do mà hãng đã phát triển nên một giải pháp thay thế mang tên Android Runtime (ART) trong suốt hai năm vừa qua. Một phiên bản thử nghiệm của ART đã được nhúng trong Android 4.4 và bạn có thể tìm thấy nó ở trong phần Settings > Developer Options > Select Runtime (một số máy dùng ROM cook có thể không có, và việc kích hoạt nó lên có thể khiến hệ thống và ứng dụng gặp lỗi đấy nhé).

Chuyen_sang_ART.

ART sử dụng một cách xử lí rất khác so với Dalvik. Hiện nay, các ứng dụng Android được phiên dịch ra mã máy ở thời điểm mà chúng ta chạy chúng lên. Dalvik thực hiện điều này bằng một bộ máy gọi là "Just-In-Time" (JIT). Chữ Just-In-Time dịch sang tiếng Việt thì có nghĩa là "vừa kịp lúc", tức là chỉ đoạn mã nào cần thiết mới được dịch và chỉ dịch khi cần.

Còn với ART, nó xài bộ máy "Ahead-Of-Time" (AOT) để phiên dịch mã bytecode của ứng dụng thành mã máy ở thời điểm bạn cài nó vào thiết bị. Điều này đồng nghĩa với việc khi bạn chạy app lên, nó đã tồn tại sẵn ở dạng mã máy và thiết bị của chúng ta cứ thế mà thực thi app.

Lợi ích của ART

Lợi ích lớn nhất của ART đó là nó cho phép lập trình viên Android tiếp tục viết phần mềm theo như cách mà họ đã làm từ trước đến nay, phần mềm của họ cũng vẫn có thể chạy trên nhiều loại CPU và thiết bị khác nhau, nhưng với tốc độ nhanh hơn đáng kể. Cảm giác máy sẽ mượt mà hơn. Với các phần mềm cần nhiều sức mạnh tính toán, ví dụ app chỉnh sửa ảnh hay video thì lợi ích sẽ càng rõ ràng hơn nữa. Chưa hết, hiện nay hầu hết thiết bị Android đều sử dụng vi xử lí đa nhân (hai, bốn, tám...). Sự có mặt của ART có thể giúp ứng dụng cần phải kích hoạt ít nhân hơn Dalvik lúc phiên dịch, từ đó dẫn đến việc tiết kiệm pin hơn.

Chúng ta cũng có thể thấy được ART là một trong những lý do mà Google tuyên bố là Android 4.4 có thể dùng tốt cho những thiết bị với RAM chỉ 512MB. Vì đã được phiên dịch trước nên không còn hiện tượng Dalvik chiếm lấy RAM và bộ nhớ này sẽ được sử dụng hoàn toàn cho các ứng dụng.

Hạn chế của ART

Tất nhiên, ART sẽ cần thời gian lâu hơn để dịch lúc mà chúng ta mới vừa cài ứng dụng xong, tuy nhiên lợi ích lâu dài đó là ứng dụng sẽ tải và chạy nhanh hơn. Bạn hãy thử nghĩ xem, chúng ta chỉ cần app có một lần nên chờ lâu hơn hồi trước một chút thì cũng không vấn đề gì, trong khi tốc độ dùng app về sau nhanh hơn thì cũng đáng để bù đắp. Thực chất, với những ứng dụng nhỏ thì khoảng thời gian để ART dịch cũng rất ngắn, chỉ với những app lớn thì chúng ta mới thấy rõ sự khác biệt. Hiện nay, với những chiếc Nexus, lúc bạn chuyển từ Dalvik sang ART thì toàn hệ thống cũng chỉ mấy có vài phút để dịch sẵn hết toàn bộ app đã cài trong máy.

Ngoài ra, một hạn chế khác đó là mã máy sau khi được dịch sẵn sàng thì sẽ chiếm dung lượng lưu trữ lớn hơn là mã bytecode. Lý do đó là vì một kí tự trong bytecode thực chất được biểu diễn bằng nhiều lệnh của mã máy nên to hơn là chuyện dễ hiểu. Mức độ lớn hơn thì cao nhất là khoảng 10-20% tùy app. Con số này nghe có vẻ lớn nhưng tập tin thực thi lại không chiếm dung lượng lớn trong app nên việc tăng lên như thế sẽ không gây nhiều ảnh hưởng. Ví dụ, cả file APK của ứng dụng Google+ mới có dung lượng đến 28,3MB, nhưng phần mã chạy chỉ là 6,9MB mà thôi.

art-dalvik-apps1.
Sự chênh lệch về dung lượng ứng dụng giữa Dalvik và ART

ART hiện chỉ mới là bản thử nghiệm sơ khai

Xin nói lại rằng bản ART đang có mặt trong Android 4.4 KitKat chỉ mới là bản thử nghiệm, do đó tốc độ chưa thật sự ngon như bản chất của nó. Theo bài kiểm tra của anh @vuhai6 thì ART thậm chí còn chậm hơn Dalvik khi mở một số ứng dụng, nhưng đây chỉ mới là những buổi đầu mà thôi.

Chưa rõ bao giờ thì Google sẽ ra mắt chính thức ART, nhưng trong bối cảnh hãng đã phát triển nó hàng năm trời và đã thử nghiệm trên Android 4.4, có thể chúng ta sẽ sớm thấy nó được áp dụng rộng rãi. Nhiều khả năng là trong Android 4.5 hay 5.0 thì Google sẽ tích hợp ART.

Vậy tôi có nên chuyển sang dùng ART ở thời điểm hiện tại hay không?

Theo khuyến cáo của Google thì không. Như đã nói ở trên, do ART mới là bản thử nghiệm dành cho lập trình viên trên Android 4.4 nên có một số ứng dụng có thể không tương thích với trình phiên dịch này. Ví dụ: Titanium Backup, WhatsApp, Call of Duty: Strike Force. Bạn có thể chuyển lại Dalvik khi cần xài các app này, nhưng điều đó lại quá bất tiện cho bạn so với những gì mà ART mang lại. Nếu muốn trải nghiệm thì bạn có thể thử đổi sang ART, nhưng nếu cần sự ổn định thì hãy cứ dùng Dalvik nhé.

Nói tóm lại, ART tuy là giải pháp mới nhưng về cơ bản thì Android vẫn cần phải thông qua bộ máy phiên dịch trước khi chạy ứng dụng nên khó có thể là giải pháp lâu dài nếu muốn hệ thống thật sự ngon lành như các nền tảng đối thủ. Trong tương lai, Google vẫn cần một thứ gì đó đủ khả năng tăng tốc độ hệ thống lên cao hơn nữa, ví dụ như thay toàn bộ phần nhân hệ thống chẳng hạn. Chúng ta hãy chờ xem sao.