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