Skip to content

Bộ Nhớ Heap Và Stack Trong Java

 

1. Stack Memory

 

Đặc điểm:

  • Dùng để lưu biến cục bộ(local variables)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

 

 

Published inAllJava Core

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *