Java (ngôn ngữ lập trình)
Hệ thống thực thi > Quản lý bộ nhớ tự động

Java sử dụng bộ thu gom rác tự động (AGC) để quản lý bộ nhớ trong vòng đời đối tượng. Lập trình viên xác định thời điểm các đối tượng được tạo và thời gian chạy Java chịu trách nhiệm khôi phục bộ nhớ khi các đối tượng không còn được sử dụng. Khi không còn tham chiếu đến một đối tượng, bộ nhớ không thể truy cập sẽ đủ điều kiện để được giải phóng tự động bởi bộ thu gom rác. Một cái gì đó tương tự như rò rỉ bộ nhớ vẫn có thể xảy ra nếu mã của lập trình viên giữ một tham chiếu đến một đối tượng không còn cần thiết, thường là khi các đối tượng không còn cần thiết được lưu trữ trong các bộ chứa vẫn đang được sử dụng. Nếu các phương thức cho một đối tượng không tồn tại được gọi, một ngoại lệ con trỏ null sẽ được đưa ra.
Một trong những ý tưởng đằng sau mô hình quản lý bộ nhớ tự động của Java là các lập trình viên có thể không phải chịu gánh nặng khi phải thực hiện quản lý bộ nhớ thủ công. Trong một số ngôn ngữ, bộ nhớ để tạo các đối tượng được cấp phát ngầm trên ngăn xếp hoặc được cấp phát và phân bổ rõ ràng từ heap. Trong trường hợp thứ hai, trách nhiệm quản lý bộ nhớ thuộc về lập trình viên. Nếu chương trình không phân bổ một đối tượng, một rò rỉ bộ nhớ sẽ xảy ra. Nếu chương trình cố gắng truy cập hoặc phân bổ bộ nhớ đã được phân bổ, kết quả là không xác định và khó dự đoán, và chương trình có thể trở nên không ổn định hoặc gặp sự cố. Điều này có thể được khắc phục một phần bằng cách sử dụng các con trỏ thông minh, nhưng chúng làm tăng thêm chi phí và sự phức tạp. Lưu ý rằng việc thu gom rác không ngăn chặn rò rỉ bộ nhớ logic, tức là những nơi bộ nhớ vẫn được tham chiếu nhưng không bao giờ được sử dụng.
Việc thu gom rác có thể xảy ra bất cứ lúc nào. Lý tưởng nhất, nó sẽ xảy ra khi một chương trình không hoạt động. Nó được đảm bảo sẽ được kích hoạt nếu không có đủ bộ nhớ trống trên heap để cấp phát một đối tượng mới; điều này có thể khiến một chương trình bị dừng trong giây lát. Không thể quản lý bộ nhớ rõ ràng trong Java.
Java không hỗ trợ số học con trỏ kiểu C/C++, trong đó địa chỉ đối tượng có thể được thao tác số học (ví dụ: bằng cách thêm hoặc trừ một phần bù). Điều này cho phép bộ thu gom rác di chuyển các đối tượng được tham chiếu và đảm bảo an toàn và bảo mật kiểu.
Giống như trong C++ và một số ngôn ngữ hướng đối tượng khác, các biến của kiểu dữ liệu nguyên thủy của Java hoặc được lưu trữ trực tiếp trong các trường (đối với các đối tượng) hoặc trên ngăn xếp (đối với các phương thức) chứ không phải trên heap, điều này thường đúng đối với dữ liệu không nguyên thủy các loại (nhưng hãy xem phân tích thoát). Đây là một quyết định có ý thức của các nhà thiết kế của Java vì lý do hiệu suất.
Java chứa nhiều loại trình thu gom rác. Theo mặc định, HotSpot sử dụng bộ thu gom rác quét song song. Tuy nhiên, cũng có một số trình thu gom rác khác có thể được sử dụng để quản lý đống rác. Đối với 90% ứng dụng trong Java, bộ thu gom rác đồng thời Mark-Sweep (CMS) là đủ. Oracle đặt mục tiêu thay thế CMS bằng Garbage-First Collector (G1).
Giải quyết được vấn đề quản lý bộ nhớ không giúp lập trình viên bớt gánh nặng xử lý đúng cách các loại tài nguyên khác, như kết nối mạng hoặc cơ sở dữ liệu, xử lý tệp, v.v., đặc biệt là khi có lỗi.