21 July 2023

Mô phỏng luồng stack và heap javascript?

 


Trong Javascript, có hai loại bộ nhớ chính: stack và heap. Chúng hoạt động khác nhau trong việc lưu trữ và quản lý dữ liệu. 

 

1. Stack: 

- Stack được sử dụng để lưu trữ các biến cục bộ, tham số và các giá trị trung gian khi hàm được gọi. 

- Mỗi khi một hàm được gọi, một khung dữ liệu mới được tạo trên stack để lưu trữ các biến cục bộ và thông tin về hàm. 

- Khi hàm kết thúc, khung dữ liệu đó sẽ được xóa khỏi stack, giải phóng không gian bộ nhớ. 

 

2. Heap: 

- Heap được sử dụng để lưu trữ các đối tượng động và dữ liệu có kích thước không xác định trước. 

- Đối tượng trên heap tồn tại cho đến khi không còn bất kỳ tham chiếu nào đến chúng. 

- Trong Javascript, việc quản lý heap được thực hiện tự động thông qua thu thập rác (garbage collection), nghĩa là các đối tượng không còn được sử dụng sẽ được tự động thu hồi bộ nhớ. 

 Ví dụ mô phỏng luồng stack và heap trong Javascript:

function foo() {
    let a = 1; // Biến a được lưu trữ trên stack
    let b = { value: 2 }; // Đối tượng b được lưu trữ trên heap, và tham chiếu đến nó được lưu trữ trên stack
    bar(a, b);
}
function bar(x, y) {
    let c = x + y.value; // Biến c được lưu trữ trên stack
    console.log(c);
}
foo();

Trong ví dụ trên, khi hàm  foo  được gọi, một khung dữ liệu mới được tạo trên stack để lưu trữ biến  a  và tham chiếu đến đối tượng  b . Sau đó, khi hàm  bar  được gọi, một khung dữ liệu mới khác được tạo trên stack để lưu trữ biến  x  và  y , trong đó  y  là một tham chiếu đến đối tượng  b  trên heap. Cuối cùng, giá trị của  x  và  y.value  được tính toán trên stack và kết quả được in ra màn hình. Khi hàm  bar  kết thúc, khung dữ liệu của nó được xóa khỏi stack, giải phóng không gian bộ nhớ.

Related Posts:

  • Bài 11: Thời gian hệ thống trong Java Bài 11: Thời gian hệ thống trong Java 1, Tính thời gian chạy 1 đoạn lệnh trong chương trìnha, Tính thời gian theo mini giây: (10^(-3)s)Trong đối tượng System có phương thức "currentTimeMillis()", ta dùng nó để đ… Read More
  • Bài 6: Cấu trúc Switch Case trong Java! Bài 6: Cấu trúc Switch Case trong Java!  ​ Cấu trúc Switch…Case:  ​ Đơn giản, khi chúng ta cần xử lý các sự kiện liên quan tới nhiều trường hợp giá trị của biến, nếu dùng if - else nhiều thì code sẽ dài, lặp… Read More
  • Bài 13: Class trong Java (tiếp) Bài 13: Class trong Java (tiếp) Sau bài viết này, các bạn sẽ có cái nhìn toàn diện hơn về class trong 1 project Java (interface, abstract class tương tự), các bạn áp dụng để viết code sao cho dễ nhìn dễ hiểu và … Read More
  • Bài 9: Mảng trong Java! Bài 9: Mảng trong Java!  ​ 1, Khái niệm mảngMảng là tập hợp nhiều phần tử có cùng tên, cùng kiểu dữ liệuvà mỗi phần tử trong mảng được truy xuất thông qua chỉ số củanó trong mảng.2, Khai báo mảng<kiểu dữ liệu>… Read More
  • Bài 10: Break và Continue trong Java Bài 10: Break và Continue trong Java  ​ 1, Lệnh break:Trong cấu trúc switch chúng ta dùng câu lệnh break để thoát thỏi cấu trúc switch trong cùng chứa nó. Tương tự như vậy, trong cấu trúc lặp, câu lệnh break dùng để… Read More

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang