2014-10-08 26 views
30

Google đang di chuyển từ Dalvik đến ART (Thời gian chạy Android).Sự khác biệt giữa dexopt và dex2oat?

Tôi đã cố gắng để hiểu, làm thế nào nó sẽ cải thiện hiệu suất.

Lời giải thích tốt nhất mà tôi tìm thấy là hình ảnh dưới đây:

Dalvik and ART

Một trong những thành phần chính đó đã thay đổi là dexopt-dex2oat.

Vì tôi không có nhiều ý tưởng về những điều này, bất cứ ai có thể giải thích sự khác biệt và cách thức này sẽ cải thiện hiệu suất không?

+0

Bạn có thể chia sẻ nguồn của hình ảnh này không? – Owen

+0

@Owen http://en.wikipedia.org/wiki/File:ART_view.png –

Trả lời

50

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.

+0

bạn có thể cho tôi biết liệu OAT được chuyển đổi định dạng OAT này là tập hợp các hướng dẫn cuối cùng để chạy hoặc biên dịch hoặc tối ưu hóa thêm được thực hiện? Trên thực tế tôi đang cố gắng để làm một số phân tích tĩnh trên tập tin chuyển đổi yến mạch và sau đó ánh xạ các hướng dẫn để theo dõi hướng dẫn thời gian chạy ban đầu. Và cuối cùng bạn có thể cho tôi biết tệp nào cần tìm trong mã nguồn Android để có ý tưởng rõ ràng không? –

+2

Có, tệp yến mạch được thực thi trực tiếp. Bạn sẽ muốn xem xét dự án nghệ thuật trong AOSP. – JesusFreke

+0

Xin chào, bạn có biết nơi lưu trữ các tệp AOT này không? Nó là đường dẫn/dữ liệu/dalvik-cache/prfiles? –

Các vấn đề liên quan