2011-05-04 44 views
12

Nếu tôi đã hiểu chính xác, quy trình Android có hai đống - một được quản lý bởi máy ảo và một máy chủ.Kích thước tối đa của vùng gốc trên Android?

Kích thước của vùng máy ảo không thể vượt quá 16mb (ít nhất, giá trị này có thể cao hơn trên một số điện thoại).

Nhưng còn kích thước tối đa của vùng gốc?

Giới hạn 16 mb dường như không quá giới hạn khi ứng dụng có thể phân bổ hơn 16MB thông qua NDK, nhưng hệ điều hành sẽ bắt đầu giết các quy trình khác và có thể là quá trình tiền cảnh. bộ nhớ được sử dụng.

Khi nào hệ điều hành bắt đầu hoạt động theo cách này? Khi heap bản địa + kích thước heap VM vượt quá 16mb?

Debug.getNativeHeapSize() cho kích thước của vùng gốc, nhưng có chức năng kiểm tra kích thước heap + VM gốc kết hợp không?

Tò mò khi nghe ai đó biết cách hoạt động của tính năng này!

Trả lời

4

Không có "dòng chết" trong quản lý bộ nhớ Android. Khi hệ thống cần giết các quy trình để lấy lại bộ nhớ, nó xem xét một số yếu tố khác nhau, bao gồm cả sự quan trọng của quy trình (được xác định bởi các yếu tố như nó có ở tiền cảnh hay cung cấp dịch vụ cho ứng dụng tiền cảnh) và bộ nhớ sử dụng.

Nếu quy trình của bạn ở chế độ chờ, và ngồi trên nhiều bộ nhớ hơn bất kỳ thứ gì khác, nó có khả năng bị giết trước.

Thuật toán chính xác đã phát triển một chút theo thời gian và hệ thống không đảm bảo bất kỳ hành vi cụ thể nào.

+0

Ok, điều đó có ý nghĩa. Một đoán là 16mb + X tổng số sử dụng mem kết quả quá trình mạo hiểm bị giết ngay cả khi nó ở phía trước. Làm thế nào lớn X là có thể khác nhau giữa các phiên bản hệ điều hành, vv – Viktor

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