2013-04-15 10 views
5

Chúng tôi đã phát triển các mẫu thử NDK cho một dự án đơn giản. Mã được biên dịch và làm việc trên thiết bị và trong trình mô phỏng. Tuy nhiên khi nhìn vào menu cài đặt trên điện thoại: (Samsung Galaxy Nexus (Android 4.2.2), Samsung Giờ (Android 2.3.6)), chạy ứng dụng trên Gio chiếm nhiều không gian hơn khi ứng dụng chạy trên Galaxy Nexus. Ngoài ra, lệnh sau báo cáo phân bổ heap cao hơn nhiều cho GIO:Thiết bị Android có sử dụng số lượng heap và dấu chân khác nhau cho cùng một ứng dụng hay không

System.out.println(Debug.getNativeHeapAllocatedSize()/1049L); 

Chúng tôi đang sử dụng thư viện tĩnh cho nhiều chức năng. Các kết quả chính xác là:

NEXUS:

  • Footprint (MB) (Java thực hiện) 1,24
  • Footprint (MB) (C++ thực hiện lib) 0,96
  • cấp phát bộ nhớ (MB) (Thực hiện Java) 1.6
  • Phân bổ bộ nhớ (MB) (triển khai thực hiện lib C++) 1.5

GIO:

  • Footprint (MB) (Java thực hiện) 1,19
  • Footprint (MB) (C++ thực hiện lib) 1,71
  • cấp phát bộ nhớ (MB) (Java thực hiện) 4.6
  • Cấp phát bộ nhớ (MB) (triển khai thực hiện lib C++) 5.5

Lý do khác biệt trong việc sử dụng dấu chân và bộ nhớ là gì?

(Đo phân bổ trên thiết bị iOS (C++ lib) mang lại kết quả tương tự trên 3GS như trên Galaxy Nexus).

+0

Liệu 2 thiết bị sử dụng phiên bản hệ điều hành Android giống nhau không? Tôi nghĩ nó có liên quan. – Raptor

+0

Câu hỏi được cập nhật với phiên bản Android –

+2

Android OS v2 & v4 xử lý bộ nhớ theo một cách khác, khi chúng sử dụng hạt nhân khác. Có lẽ đây là lý do của sự khác biệt. – Raptor

Trả lời

2

Có rất nhiều sự khác biệt giữa Android 2.x và Android 4. Một ví dụ là làm thế nào bộ nhớ bitmap được quản lý:

Trên Android Android 2.2 (cấp API 8) và thấp hơn, khi rác bộ sưu tập xảy ra, chủ đề của ứng dụng của bạn bị dừng lại. Điều này gây ra độ trễ có thể làm giảm hiệu suất. Android 2.3 thêm bộ nhớ đồng thời bộ sưu tập, có nghĩa là bộ nhớ được khôi phục ngay sau khi một bitmap không còn được tham chiếu.

Trên Android 2.3.3 (API cấp 10) và thấp hơn, dữ liệu pixel sao lưu cho bitmap được lưu trữ trong bộ nhớ riêng. Nó tách biệt với bản thân bitmap, được lưu trữ trong vùng Dalvik . Dữ liệu pixel trong bộ nhớ riêng không được phát hành theo cách có thể dự đoán được , có khả năng khiến ứng dụng vượt quá giới hạn bộ nhớ và sự cố. Kể từ Android 3.0 (API cấp 11), dữ liệu pixel được lưu trữ trên vùng Dalvik cùng với bitmap được liên kết.

Trích dẫn từ: http://developer.android.com/training/displaying-bitmaps/manage-memory.html

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