Home » Bộ Nhớ Heap Và Stack Trong Java
1. Stack Memory
Đặc điểm:
- Dùng để lưu biến cục bộ(local variables) và lời gọi hàm(method call)
- Dữ liệu lưu theo thứ tụ gọi rồi trả về → cấu trúc LIFO (Last – In – First – Out)
- Khi một phương thức kết thúc, vùng nhớ của nó sẽ được giải phóng tự động.
Ưu Điểm:
- Truy cập rất nhanh
- Không cần dọn dẹp (tự động khi method kết thúc)
public void sayHello() {
String message = "Hello"; // biến message nằm trong stack
}
2. Heap Memory
Đặc điểm:
- Dùng để lưu object được tạo bằng
new
- Dữ liệu sống lâu hơn stack – chỉ mất đi khi không còn tham chiếu và GC dọn
- Tất cả object trong Java đều nằm trên heap
Ưu Điểm:
- Cho phép lưu object lớn, sống dài
- Có thể chia sẻ giữa các phương thức (qua tham chiếu)
Person p = new Person(); // object Person nằm trong heap
3. So sánh Stack vs Heap
| Tiêu chí |
Stack Memory |
Heap Memory |
| Lưu trữ |
Biến cục bộ, lời gọi hàm |
Object, instance của class |
| Thời gian sống |
Ngắn (hết hàm là xóa) |
Dài (đến khi không còn dùng) |
| Quản lý bộ nhớ |
Tự động theo lời gọi |
Dùng GC để thu hồi |
| Tốc độ truy cập |
Nhanh hơn |
Chậm hơn |
| Quản lý |
JVM tự tạo cho từng thread |
Dùng chung giữa các thread |
| Lỗi |
Khi stack bị đầy bộ nhớ, chương trình phát sinh lỗi: java.lang.StackOverFlowError |
Khi Heap bị đầy chương trình hiện lỗi java.lang.OutOfMemoryError: Java Heap Space |
Be First to Comment