Nếu bạn đang viết mã gốc và lo ngại về mức sử dụng bộ nhớ của mã đó, bạn nên phân tích mức phân bổ mã gốc của ứng dụng để tìm hiểu xem có cơ hội tối ưu hoá hay không.
Tại sao bạn nên phân tích bộ nhớ ứng dụng
Android cung cấp một môi trường bộ nhớ được quản lý – khi nhận thấy ứng dụng của bạn không còn sử dụng một số đối tượng, trình thu gom rác sẽ giải phóng bộ nhớ không dùng đến trở về vùng nhớ khối xếp. Tuy Android liên tục cải tiến cách tìm bộ nhớ không dùng đến, nhưng đến một thời điểm nào đó trên mọi phiên bản Android, hệ thống sẽ phải tạm dừng mã của bạn trong giây lát. Trong hầu hết trường hợp, bạn sẽ không nhận thấy việc tạm dừng. Tuy nhiên, nếu ứng dụng của bạn phân bổ bộ nhớ nhanh hơn tốc độ hệ thống thu thập bộ nhớ, thì ứng dụng của bạn có thể bị gián đoạn trong khi trình thu gom giải phóng đủ bộ nhớ để đáp ứng mức phân bổ. Tình trạng trễ này có thể khiến ứng dụng của bạn bỏ qua khung hình cũng như làm chậm khung hình.
Để biết thông tin về các phương pháp lập trình có thể làm giảm mức sử dụng bộ nhớ của ứng dụng, hãy đọc nội dung Quản lý bộ nhớ của ứng dụng.
Tổng quan về mức phân bổ cho mã gốc
Khi bạn chạy tác vụ Theo dõi mức sử dụng bộ nhớ (Phân bổ mã gốc), Trình phân tích tài nguyên Android Studio sẽ theo dõi quá trình phân bổ và giải phóng các đối tượng trong mã gốc trong khoảng thời gian mà bạn chỉ định, đồng thời cung cấp các thông tin sau:
- Allocations (Phân bổ): Số lượng đối tượng được phân bổ bằng
malloc()
hoặc toán tửnew
trong khoảng thời gian đã chọn. - Deallocations: Số lượng đối tượng được giải phóng bằng
free()
hoặc toán tửdelete
trong khoảng thời gian đã chọn. - Allocations Size (Kích thước phân bổ): Kích thước tổng hợp tính bằng byte của mọi lượt phân bổ trong khoảng thời gian đã chọn.
- Deallocations Size (Kích thước giải phóng): Kích thước tổng hợp tính bằng byte của mọi mức bộ nhớ đã được giải phóng trong khoảng thời gian đã chọn.
- Total Count (Tổng số): Giá trị trong cột Allocations (Phân bổ) trừ đi giá trị trong cột Deallocations (Giải phóng).
- Remaining Size (Kích thước còn lại): Giá trị trong cột Allocations Size (Kích thước phân bổ) trừ đi giá trị trong cột Deallocations Size (Kích thước giải phóng).
Thẻ Hình ảnh hiển thị chế độ xem tổng hợp của tất cả đối tượng liên quan đến mã gốc trong ngăn xếp lệnh gọi trong phạm vi thời gian đã chọn. Về cơ bản, thông tin này cho bạn biết tổng dung lượng bộ nhớ mà ngăn xếp lệnh gọi với các thực thể hiển thị chiếm dụng. Hàng đầu tiên cho biết tên chuỗi tin nhắn. Theo mặc định, các đối tượng được xếp chồng từ trái sang phải dựa trên kích thước phân bổ; hãy sử dụng trình đơn thả xuống để thay đổi thứ tự.
Theo mặc định, trình phân tích tài nguyên sử dụng kích thước mẫu là 2048 byte: mỗi khi phân bổ được 2048 byte bộ nhớ, hệ thống sẽ chụp nhanh bộ nhớ. Kích thước mẫu nhỏ hơn giúp việc chụp thông tin tổng quan nhanh xảy ra thường xuyên hơn, mang lại nhiều dữ liệu chính xác hơn về mức sử dụng bộ nhớ. Kích thước mẫu lớn hơn khiến giảm độ chính xác của dữ liệu, nhưng sẽ tốn ít tài nguyên hệ thống hơn và cải thiện hiệu suất trong quá trình ghi. Để thay đổi kích thước mẫu, hãy xem phần Chỉnh sửa cấu hình bản ghi.