Tôi có một đoạn mã tải một hình ảnh rất lớn trong bộ nhớ. Vì vậy, có vẻ như một điều hợp lý để gọiKhi nào để thu gom rác
System.gc();
trước khi tải hình ảnh. Từ những gì tôi có thể nói nó hoạt động mà không có vấn đề gì.
Hôm qua tôi quyết định sử dụng phần mềm khá hữu ích có tên là FindBugs để quét mã của bạn và báo cáo lại các sự cố có thể gây ra lỗi hoặc chiến lược thường không được thông báo. Vấn đề là đoạn mã tôi đề cập này được báo cáo. Mô tả là:
... buộc thu gom rác; cực kỳ mơ hồ trừ đang chuẩn
Và nó tiếp tục xây dựng:
Mã dứt khoát gọi rác bộ sưu tập. Ngoại trừ việc sử dụng cụ thể trong các tiêu chuẩn , điều này rất đáng ngờ.
Trong quá khứ, tình huống mà người đã viện dẫn một cách rõ ràng các bộ thu rác trong thói quen như phương pháp Finalize gần hoặc đã dẫn đến lỗ đen hiệu suất lớn. Rác bộ sưu tập có thể tốn kém. Mọi tình huống buộc hàng trăm hoặc hàng nghìn bộ sưu tập rác sẽ khiến máy thu thập thông tin.
Vì vậy, câu hỏi của tôi là: KHÔNG ĐƯỢC lập trình gọi bộ gom rác trong một trường hợp như vậy? Mã của tôi chỉ gọi nó một lần và phương thức mà nó được sử dụng hiếm khi được sử dụng. Và nếu bạn không thể gọi nó thì bạn nên làm gì trong trường hợp bạn cần nhiều bộ nhớ nhất có thể trước khi thực hiện một thao tác tốn nhiều bộ nhớ và bạn cần giải phóng bộ nhớ nhiều như trước khi nó hoạt động?
Trong trường hợp này, bạn có thể là hoạt động nối tiếp. Nếu bạn cho phép GC quyết định thời điểm chạy, nó có thể chạy tốt khi ứng dụng đang chặn I/O. –
Q: Khi nào nên gọi System.gc(). A: không bao giờ – KitsuneYMG
wow đó là cái nhìn sâu sắc đầy đủ. Tôi hoàn toàn hiểu tại sao tôi không bao giờ nên gọi gc bằng câu trả lời của bạn. Cảm ơn nhiều. –