Stack lưu trữ các giá trị nguyên thủy và tham chiếu đến đối tượng, được cấp phát riêng cho mỗi thread, hoạt động theo thứ tự LIFO — khi method kết thúc, bộ nhớ stack được giải phóng tự động.
- Heap lưu trữ các đối tượng thực sự, được chia sẻ giữa tất cả thread, và cần Garbage Collector để dọn dẹp.
- Stack nhanh hơn nhưng giới hạn kích thước; Heap lớn hơn nhưng chậm hơn và cần quản lý GC.