Cơ chế garbage collection
GC có 1 cơ chế là quét các object k được tham chiếu trong heap từ stack. Như vậy khi nào ta cần manual – quét thủ công bằng cách gọi gc.collect(), khi nào ta nên để hệ thống tự quét. Many thanks mọi người
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Không rõ những thông tin em tìm được là ở nguồn nào, nhưng chúng ta hãy tìm hiểu sâu 1 chút để trả lời câu hỏi của em nhé. Bản chất bên trong của
System.gc();
là gọi đếnRuntime.getRuntime().gc();
, và gc là 1 hàm native:public native void gc();
, và java thì có nhiều loại GC khác nhau, tuy nhiên ở phiên bản OpẹnJDK hiện tại thì đâu đó có 2 hay 4 loại dùng cho G1Collection và GenCollectedHeap là “young” generation và Concurrent Mark Sweep (anh cũng ko biết tên thế có đúng không, em đọc code OpenJDK nhé). Bây giờ mình sẽ tập trung vào G1Collection nhé:Em có thể thấy rằng nó check should_do_concurrent_full_gc, nên không phải em cứ gọi gc là được, thêm vào nữa việc gọi gc nhiều sẽ làm chương trình bị tăng độ trễ, vì nó phải lock các đối tượng lại để tiến hành kiểm tra và remove để tránh race condition, nên lời khuyên là em không nên tự gọi gc làm gì, hãy để việc đó cho máy ảo java lập lịch nhé
Em có thể tự pull OpenJDK và sử dụng các từ khoá sau để tìm kiếm nhé: