2015-07-30 23 views
11

Tôi đang làm việc trên một ứng dụng xử lý nhiều phân bổ (theo thứ tự 4 triệu đôi và một triệu lớp). Tôi đã xem qua các bản ghi thu gom rác và tôi thấy số lượng bộ nhớ khác nhau được giải phóng trên các thiết bị khác nhau.Android Garbage Collector Bộ nhớ giải phóng

Ví dụ: Tôi có Moto X (2014) kết thúc giải phóng chỉ hơn 312 MB. Tôi cũng có một Droid Bionic chạy cùng một mã trên cùng một dữ liệu giải phóng trung bình 616 MB. Cả hai thiết bị đều có kích thước khoảng 50 MB.

Tại sao bộ nhớ nhiều hơn được giải phóng bởi GC trên Bionic so với Moto X? Họ nên tạo ra cùng một lượng rác mỗi. Điều gì đang xảy ra đằng sau hậu trường trong bộ thu gom rác? Moto X là trên Android 5.1 và Bionic là trên 4.1.2.

Chỉnh sửa: Tôi có bốn thiết bị đang giải phóng khoảng 300 MB RAM: Moto X (2014), Nexus 7 2013, Nexus 7 2012 và Razr i. Cả bốn loại thuốc này đều sử dụng ART. Bionic đang chạy thời gian chạy Dalvik. Đây có phải là lý do tại sao có ít giải phóng? Tôi nhận thấy GC_FOR_ALLOC không xảy ra trong ART nhưng được gọi là tất cả thời gian trên Dalvik.

+0

Tôi nghĩ sự khác biệt là do kiến ​​trúc vi xử lý được sử dụng. MotoX sử dụng Qualcomm Snapdragon S4 (bộ lệnh ARMv7), Bionix đã sử dụng Cortex A-A53 được cập nhật nhiều hơn (bộ lệnh ARMv8). –

+0

@ShreyasChavan đó là 2014 Moto X vì vậy nó có một Snapdragon 801 và Bionic (từ năm 2011) đã có một TI OMAP Cortex-A9 –

+2

Kiến trúc bộ vi xử lý không liên quan. Dalvik của heap và GC đã tích cực phát triển cho đến giữa năm 2011, khi tất cả mọi thứ chuyển sang phát triển nghệ thuật. Bạn có thể thấy sự khác biệt mà nhiều năm phát triển có thể thực hiện. Tôi biết rất ít về nội dung của Art, vì vậy tôi không thể cung cấp bất kỳ thông tin chi tiết cụ thể nào. Tôi sẽ chỉ ra rằng nhìn vào thông điệp tường trình là một so sánh táo-to-cam, và việc thiếu đăng nhập theo phong cách Dalvik trên một thiết bị nghệ thuật không có nghĩa là các hành động tương đương sẽ không diễn ra. – fadden

Trả lời

2

Trích dẫn từ this bài:

Tiếp theo, nhóm nghiên cứu ART làm việc để tối ưu hóa thu gom rác (GC). Thay vì hai lần tạm dừng tổng cộng khoảng 10ms cho mỗi GC trong Dalvik, bạn sẽ chỉ thấy một, thường là dưới 2 mili giây. Họ cũng đã song song các phần của chạy GC và các chiến lược thu thập được tối ưu hóa để được nhận thức được trạng thái thiết bị. Ví dụ: toàn bộ GC sẽ chỉ chạy khi điện thoại bị khóa và phản hồi tương tác của người dùng không còn là quan trọng. Đây là một cải tiến rất lớn đối với các ứng dụng nhạy cảm với các khung hình bị xóa .

Tác giả nói ở đây là thiết bị hỗ trợ ART sẽ hiệu quả hơn nhiều trong ngữ cảnh GC - cả về thời gian GC "lãng phí" và lượng bộ nhớ được giải phóng khi chạy.

đóng góp bổ sung để sử dụng bộ nhớ thấp hơn có thể là do này (đây là chỉ là một phỏng đoán):

Trong lẽ là cải tiến quan trọng nhất, ART tại biên dịch ứng dụng của bạn để mã máy trực tiếp khi cài đặt trên thiết bị của người dùng. Được biết đến như là biên dịch trước thời hạn, bạn có thể thấy hiệu suất cao của khi các trình biên dịch được điều chỉnh cho các kiến ​​trúc cụ thể (chẳng hạn như ARM, x86 hoặc MIPS). Điều này giúp loại bỏ sự cần thiết để biên dịch ngay trong thời gian mỗi khi một ứng dụng được chạy. Do đó, ứng dụng của bạn sẽ mất nhiều thời gian hơn để cài đặt nhưng sẽ khởi động nhanh hơn khi khởi chạy nhiều tác vụ được thực hiện khi chạy trên máy ảo Dalvik, như xác minh lớp và phương pháp.

Vì ART có thể biên dịch ứng dụng của bạn trước thời gian, do đó cho phép trình biên dịch thực hiện tốt hơn việc tối ưu hóa mã của bạn.

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