Nếu bạn hỏi về những gì xảy ra với các đối tượng được tham chiếu bằng các biến trong phương pháp tĩnh, thì các đối tượng đó trở nên dễ hiểu khi thu thập rác khi chúng không còn trong phạm vi.
Nếu bạn đang nói về các đối tượng được tham chiếu bởi trường tĩnh thì các thuật ngữ này sẽ không được thu thập cho đến khi chúng tham chiếu được đặt thành rỗng.
Ví dụ sau đây có thể minh hoạ rõ hơn điều này:
class Example
{
private static object field1 = new object();
public static void SomeMethod()
{
object variable1 = new object();
// ...
}
public static void Deref()
{
field1 = null;
}
}
Đối tượng được tham chiếu bởi field1 sẽ được tạo ra khi các lớp được nạp và sẽ vẫn bắt nguồn từ ngay cả khi đối tượng của lớp Ví dụ được tạo ra và bị phá hủy. Cách duy nhất để thu gom rác đối tượng đó là gọi phương thức Deref(), nó sẽ dereference nó bằng cách thiết lập tham chiếu là null. (Trên thực tế, bạn có thể hủy lớp bằng cách tải miền ứng dụng nhưng điều này có phần nâng cao hơn và không phải thứ bạn thường gặp phải thường xuyên.)
Ngược lại, phương thức tĩnh SomeMethod() tạo đối tượng và tham chiếu nó theo biến số biến1. Đối tượng này là dễ hiểu đối với việc thu gom rác ngay sau khi nó nằm ngoài phạm vi (ở cuối phương thức). Về cơ bản, nó có thể được thu thập trước đó nếu phần còn lại của phương pháp không tham chiếu nó.
Nguồn
2009-11-30 17:54:40