dexopt thực hiện một số tối ưu hóa trên tệp dex. Nó làm những việc như thay thế một lệnh gọi ảo bằng một phiên bản được tối ưu hóa bao gồm chỉ mục vtable của phương thức được gọi, để nó không phải thực hiện tra cứu phương thức trong khi thực thi.
Kết quả của dexopt là tệp odex (tối ưu hóa dex). Điều này rất giống với tệp dex gốc, ngoại trừ việc nó sử dụng một số mã opcode được tối ưu hóa, như lệnh ảo được gọi được tối ưu hóa.
dex2oat lấy tệp dex và biên dịch nó. Kết quả về cơ bản là một tập tin elf mà sau đó được thực thi nguyên bản. Vì vậy, thay vì có bytecode được giải thích bởi một máy ảo, nó bây giờ có mã nguồn gốc có thể được thực thi một cách nguyên bản bởi bộ vi xử lý. Điều này được gọi là biên dịch AOT (trước thời hạn).
Cả hai công cụ này thường chạy at install time on the device.
Một yếu tố khác cần lưu ý là dalvik đã sử dụng trình biên dịch JIT (just-in-time) - có nghĩa là nó cũng có thể biên dịch bytecode thành mã gốc. Tuy nhiên, sự khác biệt chính là ART biên dịch mọi thứ trước thời hạn, trong khi dalvik chỉ biên dịch một tập hợp con của bytecode bằng cách sử dụng heuristics để phát hiện mã được thực thi thường xuyên nhất, và nó được biên dịch trong khi thực thi.
Bạn có thể chia sẻ nguồn của hình ảnh này không? – Owen
@Owen http://en.wikipedia.org/wiki/File:ART_view.png –