Je ne peux pas comprendre ce qui se passe iciGarbage Collector sortie inattendue
public class UnderstandGC {
public class Inner1
{
String name=new Inner2().name;
public void finalize()
{
System.out.println("Inner1 -> I am Dead");
}
}
public class Inner2
{
public String name="Inner2";
public void finalize()
{
System.out.println("Inner2 -> I am Dead");
}
}
public void finalize()
{
System.out.println("Main -> I am Dead");
}
public static void main(String[] args) {
UnderstandGC ugc=new UnderstandGC();
Inner1 inner1=ugc.new Inner1();
//System.out.println("hello"); //1
Runtime.getRuntime().gc();
}
}
Résultats escomptés: Inner2 -> I am Dead
bcoz objet de Inner2 instancié comme référence sur le terrain dans Inner1 n'a pas de références locales de la pile principale d'exécution de fil.
Sortie Observé: rien
L'observation intéressante est de savoir si j'inclure un commentaire //1
dans mon code il fonctionne très bien. Je ne peux pas comprendre ce qui se passe.
D'accord avec la déclaration mais cela fonctionne à chaque fois si j'ajoute // 1. Je me suis testé plus de 10 fois. – user2653926
@ user2653926 Cela peut être dû à la façon dont votre JVM est implémentée. L'écriture sur une sortie standard peut provoquer cela. Un million d'autres choses peuvent le provoquer aussi. Vous ne devriez pas en dépendre, jamais. –
OK dernière question "IS Println auto flush" cela signifie que cela se produit de façon synchrone – user2653926