Hầu hết các lập trình viên đồng ý rằng việc thu gom rác là một điều tuyệt vời, và trong hầu hết các ứng dụng đều đáng giá. Tuy nhiên, quan sát cá nhân của tôi là việc quản lý bộ nhớ cho hầu hết các đối tượng là tầm thường, và có lẽ 10% -20% trong số chúng giải thích cho nhu cầu về kludges như đếm tham chiếu và các lược đồ quản lý bộ nhớ phức tạp nói chung. Có vẻ như tôi có thể nhận được tất cả lợi ích của việc thu gom rác chỉ bằng một phần nhỏ chi phí bằng cách xóa các đối tượng lớn một cách thủ công, nơi mà tuổi thọ của đối tượng hiển nhiên và cho phép GC thu thập phần còn lại, giả sử triển khai GC hỗ trợ . Điều này sẽ cho phép GC chạy ít thường xuyên hơn và tiêu thụ ít bộ nhớ dư thừa hơn, trong khi vẫn tránh các trường hợp thực sự khó quản lý theo cách thủ công. Thậm chí thú vị hơn sẽ là nếu trình biên dịch chèn lệnh delete xác định tự động nơi kiếp đã rõ ràng:Quy tắc 90/10 về quản lý bộ nhớ?
int myFunc() {
Foo[] foo = new Foo[arbitraryNumber]; // May be too big to stack allocate.
// do stuff such that the compiler can prove foo doesn't escape.
// foo is obviously no longer needed, can be automatically deleted here.
return someInteger;
}
Tất nhiên, điều này có thể không làm việc tốt với một GC sao chép, nhưng vì lợi ích của bài này chúng ta hãy giả isn GC của chúng tôi không sao chép. Tại sao các lược đồ quản lý bộ nhớ lai như vậy dường như rất hiếm trong các ngôn ngữ lập trình chính thống?
Xác nhận âm đạo về 'quan sát cá nhân' không giúp các lập trình viên khác. Bạn đã * đo gì *? –