Computer >> Máy Tính >  >> Lập trình >> Java

Sự khác biệt giữa bộ nhớ Stack và Heap trong Java

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