Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Vùng nhớ Stack của Java Virtual Machine (JVM)

Dưới đây là một số điểm chính để hiểu về vùng Stack của JVM:

  • Trong quá trình tạo luồng, Java Virtual Machine tạo một stack riêng biệt.
  • JVM chỉ thực hiện hai hoạt động trên stack này: push (chèn) và pop (xóa).
  • Khi một luồng đang thực thi, stack liên quan đến nó được gọi là runtime stack.
  • Mọi lời gọi phương thức do luồng thực hiện, tính toán trung gian, gán biến cục bộ, tham số gọi, v.v., đều được lưu trữ như một hoạt động trong runtime stack.
  • Khi luồng dừng hoặc hoàn thành thực thi, phần tương ứng từ stack bị xóa.
  • Khi tất cả các lời gọi của luồng hoàn thành, stack trở nên trống và bị xóa.
  • Trước khi chấm dứt luồng, JVM hủy stack liên quan đến luồng đó.
  • Stack lưu trữ dữ liệu liên quan đến một luồng chỉ dành riêng cho luồng đó và không thể truy cập từ các luồng khác.
  • Điều này cho thấy dữ liệu trong stack là thread-safe (an toàn luồng).
  • Mọi dữ liệu trong stack liên quan đến luồng được gọi là bản ghi kích hoạt (activation record) hoặc khung ngăn xếp (stack frame).

Lưu ý - Không bắt buộc JVM stack phải có các vị trí bộ nhớ liền kề.

Cấu trúc bản ghi kích hoạt/khung ngăn xếp

Nó bao gồm ba thành phần:

  • Mảng biến cục bộ (Local variable array)
  • Ngăn xếp toán hạng (Operand stack)
  • Dữ liệu khung (Frame data)

JVM tạo một khung ngăn xếp với kích thước yêu cầu bằng cách kiểm tra dữ liệu lớp.

Ngăn xếp toán hạng hoạt động như một không gian làm việc cho JVM - được dùng để lưu trữ kết quả tính toán trung gian. Nó được cấu trúc như một mảng biến cục bộ, nhưng có thể truy cập bằng cách thực hiện push và pop trên stack.

Dữ liệu khung - Chứa các giá trị hằng số và dữ liệu trả về của phương thức. Ngoài ra, nó chứa tham chiếu đến bảng ngoại lệ (Exception table) chứa tất cả thông tin về khối catch khi ngoại lệ cần được bắt và thông báo liên quan cần hiển thị trên console.