Computer >> Máy Tính >  >> Lập trình >> Java

Rò rỉ bộ nhớ trong Java

Trong Java, việc thu gom rác (công việc của hàm hủy) được thực hiện tự động bằng cách sử dụng tính năng thu gom rác. Nhưng nếu có các đối tượng có tham chiếu đến chúng trong mã thì sao? Nó không thể được phân bổ, tức là không thể xóa bộ nhớ của chúng. Nếu tình huống như vậy xảy ra lặp đi lặp lại, và các đối tượng được tạo hoặc được giới thiệu hoàn toàn không được sử dụng, chúng sẽ trở nên vô dụng. Đây là những gì được gọi là rò rỉ bộ nhớ.

Nếu vượt quá giới hạn bộ nhớ, chương trình sẽ bị kết thúc bằng cách tạo ra một lỗi, tức là "OutOfMemoryError". Đây là lý do tại sao chúng ta luôn đề xuất loại bỏ tất cả các tham chiếu đến một đối tượng để bộ thu gom rác Java có thể tự động hủy nó.

Dưới đây là một ví dụ minh họa cách trình biên dịch hết dung lượng khi cố gắng sử dụng quá nhiều bộ nhớ -

Ví dụ

import java.util.Vector;
public class Demo{
   public static void main(String[] args){
      Vector my_v1 = new Vector(314567);
      Vector my_v2 = new Vector(784324678);
      System.out.println("This is the last line to be printed");
   }
}

Đầu ra

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Vector.<init>(Vector.java:142)
at java.base/java.util.Vector.<init>(Vector.java:155)
at Demo.main(Demo.java:7)

Một lớp có tên Demo chứa hàm chính trong đó hai đối tượng vectơ đã được tạo bằng cách gán cho chúng một khoảng trắng quá lớn. Dòng in cuối cùng chỉ được viết để kiểm tra xem trình biên dịch có đạt đến dòng đó hay không. Trong thực tế thì không, vì không gian mà các vectơ này chiếm dụng là rất lớn và không thể phân bổ nhiều bộ nhớ, dẫn đến lỗi.