Các instruction của một chương trình đang chạy và dữ liệu liên quan được lưu trữ tạm thời trong bộ nhớ máy tính. Nếu bạn là một người lập trình Java, thì bạn không cần phải lo lắng về việc quản lý bộ nhớ bởi vì các JVM và GC(garbage Collector) sẽ làm công việc này. Tuy nhiên, bạn cần biết cách thức tổ chức quản lý bộ nhớ của Java. Điều này sẽ giúp bạn hiểu cách thức mà một đối tượng được tạo ra. Như trong hình dưới đây, một dữ liệu của chương trình được đặt tại hai khu vực khác nhau trong bộ nhớ: stack và heap. Stack và heap tham chiếu đến những cách(hoặc nơi) khác nhau để lưu trữ trong bộ bộ nhớ các phần tử của một chương trình đang chạy.

Lưu trữ ở Stack

Các phần tử sau đây sẽ được lưu trữ trong Stack:

  • Biến cục bộ(local): Các biến kiểu tham trị(hay kiểu nguyên thủy)  được định nghĩa bên trong một phương thức hay làm tham số của các phương thức.
  • Biến tham chiếu cục bộ: Các biến tham chiếu đến một đối tượng và được định nghĩa bên trong một phương thức hay làm tham số cho các phương thức. Hãy lưu ý rằng một đối tượng mà một biến cục bộ tham chiếu đến được lưu trữ trên heap mà không phải trên stack.
  • Triệu gọi phương thức: Khi bạn gọi một phương thức, thì phương thức được đẩy vào Stack(cụ thể là ở đỉnh của Stack).

Biến cục bộ được khai báo bên trong một phương thức, và phạm vi của một biến cục bộ kể từ lúc khai báo đến cuối phần thực thi của phương thức này. Khi phần thực thi phương thức được hoàn tất, các biến cục bộ trong phương thức sẽ được giải phóng. Nhưng các đối tượng mà một số biến cục bộ tham chiếu đến có thể vẫn còn sống và vẫn được lưu trữ trên Heap.

Lưu trữ ở Heap

Các phần tử sau đây sẽ được lưu trữ trong Heap:

  • Biến thể hiện(instance): Đó là các biến kiểu tham trị(hay biến nguyên thủy) được định nghĩa bên trong một lớp nhưng được khai báo bên ngoài của tất cả các phương thức trong lớp đó.
  • Biến tham chiếu thể hiện(instance): Đó là các biến tham chiếu đến một đối tượng và được định nghĩa bên trong một lớp nhưng được khai báo bên ngoài tất cả các phương thức của lớp đó.
  • Đối tượng: Đại diện cho các thực thể trong các vấn đề thế giới thực mà các chương trình Java cố gắng để giải quyết. Tất cả các đối tượng luôn luôn được lưu trữ trên bộ nhớ Heap. Các đối tượng khi không còn được sử dụng(hay tham chiếu) tới sẽ được GC triệu gọi để giải phóng bộ nhớ.

Bạn thấy bài viết này thế nào? (Hãy để lại comment để khích lệ người viết)