Như tôi biết, mỗi lớp có một đối tượng Class
. Có một trường hợp khi tôi sử dụng đồng bộ hóa, ví dụ:Đối tượng Class có được tạo khi JVM tải lớp A hay khi tôi gọi A.class?
public class A {
public static void main(String... args){
synchronize(A.class){
//do something...
}
}
}
này sẽ khóa A
's Class
đối tượng, đúng không? Khi nào đối tượng Class
này được tạo? Nó được tạo khi JVM tải lớp A
hoặc khi tôi gọi A.class
? Tôi không thể tìm thấy chi tiết trong JLS, có thể ai đó vui lòng cung cấp liên kết về nó không?
Xin chào, Peter, cũng có cùng câu hỏi, có thể không? – Tony
@Tony một lớp học có thể được GC chỉ khi trình tải lớp của nó là GC'ed. Điều này có nghĩa là tất cả các phiên bản của tất cả các lớp cho trình nạp lớp không còn được tham chiếu mạnh mẽ nữa. ClassLoader chính/mặc định không bao giờ được GC'ed. –
cảm ơn, A a = new A(), tôi có thể nói a là một thể hiện của lớp A, nhưng đối tượng Lớp A là trường hợp của ai đó, nếu nó thuộc về A, tôi không nghĩ rằng đối tượng Lớp = – Tony