5

Tôi đang sử dụng GCD để nhận thông báo về áp lực bộ nhớ.Cách trả lời thông báo áp lực bộ nhớ từ GCD?

GCD documentation mô tả một số hằng số như sau:

DISPATCH_MEMORYPRESSURE_WARN

Điều kiện áp lực bộ nhớ hệ thống là ở giai đoạn cảnh báo. Ứng dụng sẽ giải phóng bộ nhớ mà chúng không cần ngay bây giờ.

DISPATCH_MEMORYPRESSURE_CRITICAL

Điều kiện áp lực bộ nhớ hệ thống ở giai đoạn quan trọng. Ứng dụng sẽ giải phóng bộ nhớ càng nhiều càng tốt.

Có vẻ hợp lý là tôi nên giải phóng bộ nhớ không sử dụng. Tuy nhiên, ở những nơi khác (man pagessource code) tôi thấy ghi chú này không liên quan đến các hằng số:

áp lực bộ nhớ Elevated là một điều kiện toàn hệ thống các ứng dụng đăng ký nguồn này nên phản ứng với bằng cách thay đổi bộ nhớ tương lai của họ hành vi sử dụng, ví dụ bằng cách giảm kích thước bộ nhớ cache của các hoạt động mới được thực hiện cho đến khi áp lực bộ nhớ trở lại bình thường.

Tuy nhiên, các ứng dụng không nên đi qua và loại bỏ cache hiện cho các hoạt động trong quá khứ khi hệ thống hệ thống áp lực bộ nhớ tem vào một trạng thái cao, vì đó là khả năng kích hoạt các hoạt động VM rằng sẽ tiếp tục thêm ther nặng thêm áp lực bộ nhớ hệ thống.

Điều này làm tôi bối rối. Vì vậy, tôi nên giải phóng bộ nhớ, hay tôi nên ngừng cấp phát bộ nhớ mới?

Trả lời

0

MacOS có hệ thống bộ nhớ ảo (VM) sử dụng cửa hàng sao lưu: hệ thống tệp. Hệ thống tệp được sử dụng để giữ bộ nhớ hiện không được sử dụng. Khi hệ thống đang chạy thấp trên bộ nhớ thực (RAM), những thứ trong bộ nhớ không chủ động được sử dụng có thể được ghi vào đĩa và được nạp lại vào RAM sau đó.

iOS có hệ thống bộ nhớ ảo nhưng không có cửa hàng sao lưu. Khi bộ nhớ yếu, hệ thống sẽ yêu cầu các ứng dụng giảm dung lượng bộ nhớ của chúng. Nếu điều đó không giải phóng đủ bộ nhớ, hệ thống sẽ bắt đầu giết chết ứng dụng.

Hướng dẫn bạn đang trích dẫn từ tiêu đề libdispatch đề cập đến hệ thống bộ nhớ ảo của MacOS chứ không phải iOS.

Trên iOS, ứng dụng nên loại bỏ đối tượng giảm kích thước bộ nhớ cache khi xử lý cảnh báo bộ nhớ. Chú ý đặc biệt phải được trả cho các đối tượng đang sử dụng bộ nhớ bẩn (không thể tẩy rửa). Đây là bộ nhớ hệ thống không thể tự động tái sử dụng một mình - nó phải được loại bỏ bởi ứng dụng đầu tiên. Trong một hình ảnh ứng dụng iOS điển hình (ảnh) sử dụng bộ nhớ bẩn nhất.

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