Backend nền tảng
B3 · Bộ nhớ: Stack, Heap, GC và rò rỉ bộ nhớ
Stack: biến cục bộ, lời gọi hàm; tự giải phóng khi hàm kết thúc; đệ quy quá sâu → stack overflow.
B3 · Middle
Stack như chồng giấy nháp trên bàn, dùng xong bỏ ngay. Heap như nhà kho có người dọn (Garbage Collector) – nhưng thứ gì còn dán nhãn "đang dùng" thì không ai dám dọn.
Cốt lõi
- Stack: biến cục bộ, lời gọi hàm; tự giải phóng khi hàm kết thúc; đệ quy quá sâu → stack overflow.
- Heap: object cấp phát động, được GC thu hồi khi không còn tham chiếu.
- Memory leak ở ngôn ngữ có GC: vẫn giữ tham chiếu không cần thiết (cache không giới hạn, listener không gỡ, biến toàn cục).
- GC chạy có thể gây khựng (pause), ảnh hưởng độ trễ.
Đánh đổi
Cache trong bộ nhớ nhanh nhưng phải giới hạn kích thước và có chính sách loại bỏ (LRU).
Trong thực tế
Service dùng Map làm cache không giới hạn → RAM tăng dần mỗi ngày, vài ngày lại bị kill vì hết bộ nhớ.
Bug thường gặp
Biểu đồ RAM đi lên dạng răng cưa và service tự khởi động lại mỗi đêm – dấu hiệu kinh điển của rò rỉ bộ nhớ.
Tự hỏi lại
Tìm memory leak bằng công cụ nào (heap dump, profiler)?