Sau khi bạn hiểu rõ về hoạt động quản lý bộ nhớ trên Android và đã thiết lập các công cụ để đo lường mức sử dụng bộ nhớ của trò chơi, bước tiếp theo là chủ động giảm và tối ưu hoá bộ nhớ. Việc tuân thủ các giới hạn nghiêm ngặt của Android giúp ngăn hệ thống đóng trò chơi của bạn, giảm thời gian khởi động dài và đảm bảo trò chơi của bạn chạy tốt trên mọi thiết bị.
Hướng dẫn này cung cấp các kỹ thuật thiết thực để giảm mức sử dụng bộ nhớ của trò chơi, đặc biệt tập trung vào việc tối ưu hoá cấp tài sản, các cấu hình dành riêng cho công cụ và các phương pháp hay nhất về quản lý bộ nhớ.
Giảm bộ nhớ trong Unity
Do thiết kế kiến trúc của Unity, sau khi các trình phân bổ khối gốc và heap được quản lý mở rộng, công cụ này có xu hướng giữ lại các trang bộ nhớ đó để sử dụng lại thay vì trả lại ngay cho hệ điều hành (OS), ngay cả sau khi các tài sản được phát hành. Cụ thể, không gian địa chỉ ảo (bộ nhớ dự phòng) vẫn được dự phòng trong suốt thời gian tồn tại của quy trình và bộ nhớ thực (RSS) không được thu hồi ngay lập tức cho đến khi một số chu kỳ thu gom rác (GC) và cắt bớt đã xảy ra. Do đó, mức sử dụng bộ nhớ tạm thời có thể khiến bộ nhớ thường trú tăng lên trong một thời gian dài ngay cả sau khi mức sử dụng thực tế giảm xuống. Hành vi này làm tăng nguy cơ xảy ra sự cố hết bộ nhớ (OOM) trên các thiết bị cấp thấp và làm giảm độ ổn định tổng thể của thời gian chạy.
Do đó, bạn phải tiếp cận việc tối ưu hoá bộ nhớ Unity thông qua 3 trụ cột cốt lõi phù hợp với những hành vi của công cụ này:
- Kiểm soát mức sử dụng bộ nhớ đang hoạt động để ngăn chặn tình trạng tăng đột biến bộ nhớ ngay từ đầu.
- Quản lý các định dạng hoạ tiết và biến thể chương trình đổ bóng để đảm bảo các thành phần không cần thiết và tài nguyên gốc không được khởi tạo.
- Tái cấu trúc các cấu trúc mã thời gian chạy để loại bỏ các trường hợp phân bổ không cần thiết trên vùng nhớ heap được quản lý nhằm giảm thiểu tần suất GC và việc mở rộng vùng nhớ heap.
Để biết thêm thông tin, hãy xem bài viết Tối ưu hoá bộ nhớ trong Unity.