Java Stack and Heap: Hướng dẫn Phân bổ Bộ nhớ Java

Mục lục:

Anonim

Bộ nhớ ngăn xếp là gì?

Ngăn xếp trong java là một phần bộ nhớ chứa các phương thức, biến cục bộ và biến tham chiếu. Bộ nhớ ngăn xếp luôn được tham chiếu theo thứ tự Last-In-First-Out. Các biến cục bộ được tạo trong ngăn xếp.

Bộ nhớ Heap là gì?

Heap là một phần của bộ nhớ chứa các Đối tượng và cũng có thể chứa các biến tham chiếu. Các biến phiên bản được tạo trong heap

Phân bổ bộ nhớ trong Java

Phân bổ bộ nhớ trong Java là quá trình trong đó các phần bộ nhớ ảo được dành riêng trong một chương trình để lưu trữ các biến và thể hiện của cấu trúc và lớp. Tuy nhiên, bộ nhớ không được cấp phát cho một đối tượng khi khai báo mà chỉ một tham chiếu được tạo. Để cấp phát bộ nhớ của đối tượng, phương thức new () được sử dụng, vì vậy đối tượng luôn được cấp phát bộ nhớ trên heap.

Phân bổ bộ nhớ Java được chia thành các phần sau:

  1. Đống
  2. Cây rơm
  3. Tĩnh

Sự phân chia bộ nhớ này là cần thiết để quản lý hiệu quả.

  • Phần chứa mã bytecode của bạn .
  • Phần ngăn xếp của bộ nhớ chứa các phương thức, biến cục bộ và biến tham chiếu.
  • Phần Heap chứa các Đối tượng (cũng có thể chứa các biến tham chiếu).
  • Phần Tĩnh chứa dữ liệu / phương thức tĩnh .

Sự khác biệt giữa Biến cục bộ và Biến bản sao

Biến cá thể được khai báo bên trong một lớp nhưng không phải bên trong một phương thức

class Student{int num; // num is instance variablepublic void showData{}

Biến cục bộ được khai báo bên trong một phương thức bao gồm các đối số của phương thức .

public void sum(int a){int x = int a + 3;// a , x are local variables;}

Sự khác biệt giữa Stack và Heap


Bấm vào đây nếu video không thể truy cập được

Hãy lấy một ví dụ để hiểu rõ hơn về điều này.

Hãy xem xét rằng phương thức gọi phương thức chính của bạn m1

public void m1{int x=20}

Trong ngăn xếp java, một khung sẽ được tạo từ phương thức m1.

Biến X trong m1 cũng sẽ được tạo trong khung cho m1 trong ngăn xếp. (Xem hình ảnh bên dưới).

Phương thức m1 là cách gọi m2. Trong ngăn xếp java, một khung mới được tạo cho m2 trên đầu khung m1.

Biến b và c cũng sẽ được tạo trong khung m2 trong một ngăn xếp.

public void m2(int b){boolean c;}

Phương thức tương tự m2 được gọi là phương thức m3. Một lần nữa, một khung m3 được tạo ra trên đỉnh của ngăn xếp (xem hình ảnh bên dưới).

Bây giờ, giả sử phương thức m3 của chúng ta đang tạo một đối tượng cho lớp "Tài khoản", có hai trường hợp là biến int p và int q.

Account {Int p;Int q;}

Đây là mã cho phương pháp m3

public void m3(){Account ref = new Account();// more code}

Câu lệnh new Account () sẽ tạo một đối tượng của tài khoản trong heap.

Biến tham chiếu "ref" sẽ được tạo trong một ngăn xếp java.

Toán tử gán sẽ tạo một biến tham chiếu để trỏ đến đối tượng trong Heap.

Khi phương thức đã hoàn thành việc thực thi. Luồng điều khiển sẽ quay trở lại phương thức gọi. Trong trường hợp này là phương pháp m2.

Ngăn xếp từ phương thức m3 sẽ được xả ra ngoài.

Vì biến tham chiếu sẽ không còn trỏ đến đối tượng trong heap, nên nó sẽ đủ điều kiện để thu gom rác.

Khi phương thức m2 đã hoàn thành việc thực thi. Nó sẽ được bật ra khỏi ngăn xếp và tất cả các biến của nó sẽ bị xóa và không còn khả dụng để sử dụng.

Tương tự như vậy đối với phương pháp m1.

Cuối cùng, luồng điều khiển sẽ trở lại điểm bắt đầu của chương trình. Mà thường, là phương pháp "chính".

Điều gì sẽ xảy ra nếu Object có một tham chiếu là biến thể hiện của nó?

public static void main(String args[]) {A parent = new A(); //more code } class A{ B child = new B(); int e; //more code } class B{ int c; int d; //more code }

Trong trường hợp này, biến tham chiếu "con" sẽ được tạo trong heap, đến lượt nó sẽ trỏ đến đối tượng của nó, giống như sơ đồ được hiển thị bên dưới.

Tóm lược:

  • Khi một phương thức được gọi, một khung được tạo trên đầu ngăn xếp.
  • Khi một phương thức đã hoàn thành việc thực thi, luồng điều khiển quay trở lại phương thức gọi và khung ngăn xếp tương ứng của nó được xóa.
  • Các biến cục bộ được tạo trong ngăn xếp
  • Các biến cá thể được tạo trong heap & là một phần của đối tượng mà chúng thuộc về.
  • Các biến tham chiếu được tạo trong ngăn xếp.