Quản lý bộ nhớ trong Java , định vị, tái định vị và quản lý bộ nhớ. Bộ nhớ để lưu các biến local trong hàm và lời liên hệ hàm ở runtime trong một Thread java. bài viết này SieuTocViet sẽ giải thích chi tiết sự khác nhau của bộ nhớ heap và stack trong java, như sự tương tác giữa chúng trong quá trình dùng chạy hệ thống.
Java memories
Types of memory in java
Java không dùng con trỏ cần các địa chỉ bộ nhớ không thể bị ghi đè lên một cách ngẫu nhiên hoặc cố ý. Các vấn đề định vị và tái định vị bộ nhớ, quản lý bộ nhớ do JVM kiểm soát, triệt để trong suốt (transparent) với lập trình viên. code viên không tốt nhất nên quan tâm đến việc ghi dấu các phần bộ nhớ đã cấp phát để giải phóng sau này. Các biến local bao gồm loại nguyên thuỷ (primitive) và loại tham chiếu tới đối tượng trong heap (reference) khai báo trong hàm, hoặc đối số được truyền vào hàm, thường xuyên sở hữu thời kì sống ngắn. Bất kì khi nào gọi 1 hàm, một khối bộ nhớ mới sẽ được tạo trong Stack đưa cho hàm đó để lưu các biến local. Khi hàm thực hiện xong, khối bộ nhớ tặng hàm sẽ bị xoá, và giải phóng bộ nhớ trong stack. Trong Java nắm tới hai loại bộ nhớ chính
- Bộ nhớ heap: lưu trữ các dữ liệu được cấp phát cho các tham chiếu
- Bộ nhớ stack: lưu trữ các tham chiếu (~địa chỉ các con trỏ) và các dữ liệu nguyên thủy
Một tiến trình chạy ngầm gọi đến bộ “thu gom rác” (garbage collector) để phục hồi lại phần bộ nhớ mà các đối tượng không tham chiếu đến (tái định vị). Các đối tượng không sở hữu tham chiếu đến được gán null. Bộ thu gom rác định kỳ quét qua danh sách các đối tượng của JVM và phục hồi các tài nguyên của các đối tượng không nắm tới tham chiếu. JVM quyết định khi nào thực hiện thu gom rác: Thông thường sẽ thực thi khi thiếu bộ nhớ tại thời điểm Bất kì, không thể ngăn quá trình làm của bộ thu gom rác nhưng thường yêu cầu làm sớm hơn: System.gc(); hoặc Runtime.gc(); Lớp nào cũng có phương thức finalize() – được thực thi ngay lập tức khi giai đoạn thu gom xảy ra. thường xuyên chỉ phục vụ các trường hợp đặc trưng để “tự dọn dẹp” các tài nguyên dùng khi đối tượng được gc giải phóng. Ví dụ cần phải đóng các socket, file,… cần được xử lý trong luồng chính trước khi các đối tượng bị ngắt bỏ tham chiếu.
Lê Trương Tấn Lộc (webseowp.vn)
Với hơn 4 năm kinh nghiệm Drupal 5 năm thực chiến trong quản trị website tư vấn giải pháp đẩy top, Kinh doanh online tối ưu nhất cho công ty.
Hiện là giám đốc kinh doanh tại Siêu Tốc Việt.