Tôi có một ứng dụng Android OpenGL sử dụng một lượng bộ nhớ đáng kể để thiết lập một cảnh phức tạp và điều này rõ ràng gây ra sự phân mảnh heap đáng kể. Mặc dù không có rò rỉ bộ nhớ nhưng không thể phá hủy và tạo ra ứng dụng mà không có nó thiếu bộ nhớ do phân mảnh. (Phân mảnh chắc chắn là vấn đề, không bị rò rỉ)Chiến lược phân mảnh Heap của Android?
Điều này gây ra một vấn đề lớn vì Android có thói quen hủy và tạo các hoạt động trên cùng một VM/heap. Là một chiến lược để đối phó này, tôi đã sử dụng các kỹ thuật sau:
@Override
protected void onStop() {
super.onStop();
if(isFinishing()) {
System.runFinalizersOnExit(true);
System.exit(0);
}
}
Điều này đảm bảo rằng khi hoạt động được hoàn tất nó gây ra một shutdown máy ảo hoàn chỉnh và thời gian do đó tiếp theo hoạt động này được bắt đầu nó được một đống unfragmented tươi.
Lưu ý: Tôi nhận ra rằng đây không phải là "cách Android" nhưng cho rằng bộ thu gom rác không được nén, không thể tiếp tục sử dụng lại heap.
Techinque này thực sự hoạt động nói chung, tuy nhiên nó không hoạt động khi hoạt động bị hủy ở chế độ không hoàn thiện và sau đó được tạo lại.
Có ai có đề xuất hay về cách xử lý sự hủy hoại của vùng heap không?
Lưu ý thêm: Giảm mức tiêu thụ bộ nhớ cũng không thực sự là một tùy chọn. Hoạt động này không thực sự sử dụng nhiều bộ nhớ đó, nhưng đống (và vùng heap bản địa) dường như dễ bị phân mảnh, có thể do một số khối bộ nhớ cỡ lớn
tôi có cùng vấn đề và đã sử dụng giải pháp tương tự. thực sự khủng khiếp. –