JVM đã chia không gian bộ nhớ giữa hai phần một là Stack và một phần khác là không gian Heap. Không gian ngăn xếp chủ yếu được sử dụng để lưu trữ thứ tự thực thi phương thức và các biến cục bộ.
Stack luôn lưu trữ các khối theo thứ tự LIFO trong khi bộ nhớ heap sử dụng cấp phát động để cấp phát và phân bổ các khối bộ nhớ.
Bộ nhớ được cấp phát cho heap tồn tại cho đến khi một trong các sự kiện sau xảy ra:
- Chương trình đã bị chấm dứt
- Bộ nhớ trống
Ngược lại, bộ nhớ được phân bổ cho ngăn xếp sẽ sống cho đến khi hàm trả về. Dưới đây là những điểm khác biệt.
Sr. Không. | Phím | Ngăn xếp | Bộ nhớ đống |
---|---|---|---|
1 | Cơ bản | Bộ nhớ ngăn xếp được sử dụng để lưu trữ các mục có tuổi thọ rất ngắn như biến cục bộ, biến tham chiếu của đối tượng | Bộ nhớ Heap được cấp phát để lưu trữ các đối tượng và các lớp JRE. |
2 | Đặt hàng | Ngăn xếp luôn được đặt trước theo thứ tự LIFO (cuối cùng ra trước) | Bộ nhớ Heap là cấp phát động không có mẫu cố định để cấp phát và định vị các khối trong bộ nhớ |
3 | Kích thước | Chúng tôi có thể tăng kích thước bộ nhớ ngăn xếp bằng cách sử dụng tham số JVM -XSS | Chúng tôi có thể tăng hoặc giảm kích thước bộ nhớ heap bằng cách sử dụng tùy chọn JVM -Xms và -Xmx |
4 | Mức độ hiển thị | Các biến chỉ hiển thị với chuỗi chủ sở hữu | Nó hiển thị cho tất cả các chuỗi |
5 | Ngoại lệ | JVM sẽ ném java.lang.StackOverFlowError | JVM sẽ ném java.lang.OutOfMemoryError |