Hỏi về Garbage Collector trong Java

Câu hỏi : JVM gọi phương thức finalize của đối tượng khi nào ? Nếu ta dùng System.gc() thì JVM có thực hiện phương thức finalize của đối tượng ngay lúc đó hay không ? (đối tượng đã được gán bằng null để đánh dấu rằng không nó không còn tham chiếu tới chỗ nào nữa )

Ví dụ :

class A {
  A(){}
  @Override
  protected void finalize() {//....
  }
}

public static void main(String[] args){
   A o1 = new A();
   A o2 = new A();
 // Do some cool things here ^^

  // mark o1 ,o2 that they are no longer needed 
  o1 = null;
  o2  = null;

   // call Garbage Collector 
  System.gc();
}

Bên Java thì không rõ, nhưng bên .NET thì Finalize sẽ được gọi khi bộ dọn rác tìm thấy đối tượng và hủy nó đi. Trong .NET thì chúng ta chỉ có thể “yêu cầu” chạy Garbage Collector, còn việc chạy nó khi nào và ra sao tùy thuộc vào Common Language Runtime…