Quản lý bộ nhớ
Bộ nhớ được quản lý (Managed memory) đề cập đến một hệ thống tự động trong ngôn ngữ lập trình hoặc môi trường thời gian chạy (runtime environment) chịu trách nhiệm cấp phát, theo dõi và giải phóng bộ nhớ cho một chương trình. Thay vì lập trình viên phải gọi thủ công các hàm như malloc() và free() (như trong C/C++), môi trường thời gian chạy sẽ đảm nhận trách nhiệm đảm bảo bộ nhớ được sử dụng chính xác và được giải phóng khi không còn cần thiết.
Tầm quan trọng chính của bộ nhớ được quản lý là ngăn ngừa các lỗi lập trình phổ biến và nghiêm trọng. Quản lý bộ nhớ thủ công nổi tiếng là dễ mắc lỗi, dẫn đến các lỗi nghiêm trọng như rò rỉ bộ nhớ (memory leaks - nơi bộ nhớ đã cấp phát không bao giờ được giải phóng) và con trỏ treo (dangling pointers - nơi mã cố gắng truy cập vào bộ nhớ đã được giải phóng).
Hầu hết các hệ thống bộ nhớ được quản lý đều dựa vào một quy trình gọi là Thu gom rác (Garbage Collection - GC). GC định kỳ quét vùng heap bộ nhớ của ứng dụng để xác định các đối tượng không còn được chương trình đang chạy truy cập. Một khi được xác định là không thể truy cập, GC sẽ tự động thu hồi bộ nhớ đó, làm cho nó sẵn sàng cho việc sử dụng trong tương lai.
Có nhiều thuật toán GC khác nhau, bao gồm đếm tham chiếu (reference counting), thu gom thế hệ (generational collection) và đánh dấu và quét (mark-and-sweep), mỗi thuật toán đều có những đánh đổi về chi phí hiệu năng và thời gian tạm dừng.
Bộ nhớ được quản lý là mô hình mặc định trong các ngôn ngữ như Java, Python, C# và Go. Nó rất cần thiết để xây dựng các dịch vụ lớn, chạy lâu dài, các backend web và các quy trình xử lý dữ liệu phức tạp, nơi tính ổn định và tốc độ phát triển của lập trình viên là tối quan trọng.
Nó được sử dụng rộng rãi trong các ứng dụng đám mây gốc (cloud-native applications) nơi khả năng dự đoán tài nguyên và thời gian hoạt động là các yêu cầu kinh doanh.
Các lợi ích tập trung vào độ tin cậy và năng suất. Lập trình viên có thể tập trung vào logic nghiệp vụ thay vì quản lý tài nguyên cấp thấp. Điều này làm giảm đáng kể bề mặt cho các lỗ hổng bảo mật liên quan đến bộ nhớ và sự mất ổn định trong vận hành.
Mặc dù có lợi, bộ nhớ được quản lý cũng mang đến một bộ thách thức riêng. Mối quan tâm chính là chi phí hiệu năng. Các chu kỳ thu gom rác tiêu tốn chu kỳ CPU, và các bộ thu gom được tinh chỉnh kém có thể gây ra các đợt tăng độ trễ không thể đoán trước (tạm dừng kiểu "stop-the-world"), điều này có thể không thể chấp nhận được đối với các hệ thống thời gian thực.
Các khái niệm liên quan chính bao gồm bộ nhớ Stack so với Heap, Đếm tham chiếu và Rò rỉ bộ nhớ. Hiểu sự khác biệt giữa quản lý bộ nhớ tự động và thủ công là nền tảng cho thiết kế hệ thống.