Object Life Cycle
Một chương trình java tạo ra nhiều đối tượng từ các lớp khác nhau. Đối tượng trong Java, tương tác bằng cách gửi tin nhắn cho nhau. Sau khi chúng được thực hiện xong, các đối tượng này sau đó được thu gom rác. Sau quá trình thu gom rác, Hệ điều hành xác nhận lại các tài nguyên được cấp phát cho các đối tượng này sẽ được các đối tượng mới sử dụng thêm.
Dưới đây là các giai đoạn mà một đối tượng Java đi qua khỏi vòng đời của nó:
1. Lớp Đang tải
Trước khi tạo đối tượng từ một lớp học, lớp nên được nạp vào bộ nhớ từ đĩa. Trình nạp lớp java nạp tệp lớp vào bộ nhớ.
Khi lớp học được tải?
initializers tĩnh
Java sẽ tìm kiếm bất kỳ initializers tĩnh và khởi tạo các lĩnh vực tĩnh mà là một phần của lớp và không nằm trong một trường hợp cụ thể của lớp (đối tượng).
3. tạo Object
Object là một thể hiện của lớp. Nó được tạo trong các tình huống dưới đây:
Tuyên bố: khi bạn khai báo đối tượng, ví dụ: ClassA objA; Giải thích: khi mới được sử dụng để phân bổ đối tượng mới trong bộ nhớ heap, ví dụ: ClassA mới(); Khởi tạo: đối tượng mới được xây dựng, ví dụ: ClassA(); 4. Việc sử dụng đối tượng
ở giai đoạn này, chương trình có thể sử dụng đối tượng bằng cách truy cập các trường hoặc phương thức gọi.
5. Cleanup
Đây là giai đoạn cuối cùng của đối tượng Java, nơi họ được tái chế và bộ nhớ được tuyên bố chủ quyền hệ điều hành.
điều gì sẽ xảy ra khi hủy?
Đối tượng được xóa khỏi bộ nhớ. Java giảm các tham chiếu nội bộ của nó vào đối tượng này. Bộ sưu tập rác (GC), chạy mà giải phóng các đối tượng không cần thiết nữa, tức là không có tham chiếu đến đối tượng này. Hoàn thành: GC cung cấp cho các đối tượng cơ hội cuối cùng để dọn sạch mọi tài nguyên khác bằng cách gọi phương thức finalize() của nó.
khi điều đó xảy ra?
khi đối tượng nằm ngoài phạm vi. tức là {… objA…}, đây} trở thành phạm vi. tại thời điểm này, Java chạy kiểm tra thời gian cho các tài liệu tham khảo và cho phép GC tái chế đối tượng này. khi số tham chiếu đến đối tượng này trong bộ nhớ thời gian chạy java trở thành số không (0). khi đối tượng được đặt rõ ràng thành rỗng nghĩa là objA = null ;, GC được gọi là phương thức final2() được gọi là .
@duffymo: Điều này có phụ thuộc vào việc tham chiếu của đối tượng mới được tạo có tồn tại sau khi trả về hàm không? một đối tượng được lưu trữ trong một bộ sưu tập nằm trong phạm vi của người gọi. – Cratylus
@user - Trong trường hợp đó phạm vi của đối tượng đã thay đổi và có thể không bị ảnh hưởng bởi GC. – Jeremy
"Đối tượng được tạo trong phạm vi phương thức ..." với tôi có nghĩa là đối tượng không được người dùng chuyển vào. Bạn đang đúng về một điều: nếu đối tượng được tạo ra trong phạm vi được truyền lại dưới dạng giá trị trả lại, thì người gọi có thể giữ tham chiếu và ngăn không cho nó bị gc'd. Tôi sẽ sửa đổi câu trả lời của tôi. – duffymo