???????
??????C????????Java??棨????棩????????????JVM???????????????????????????????????????????????????д??????????HotSpot?????????????Java GC????Щ???
????Java?????
???????JVM ??????Щ???????У???????????Java?????????????????????????????ж???????????鶼???????????????????и?Ч?????????????????????滮???????????Young Generation???????????Old Generation???????Permanent Generation??3??????

??????????
???????????? Eden ?? Survivor Space??S0??S1?????????С???-Xmn?????????Eden ?? Survivor Space ??????С????????8:1?????????-XX:SurvivorRatio ????????????????????10M ???Eden????8M??S0??S1??????1M??
????Eden????????????????????????У????????????????????????????·????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????£???????Eden?з?????Eden??????????????????Minor GC???????????-XX:+PrintGCDetails???????????????????????????????????????????
????Survivor????????????????????????????????????
????????????????GC??Minor GC???????????????????S0????????????Eden????????η???Minor GC?????Eden??S0?д???????????S1???????
???????????????S0??S1???????????????Eden?????Survivor??????Survivor??????????????GC?????????????GC????????????15?????????????????????????????????-XX:MaxTenuringThreshold ??GC???????????????á?
?????????
??????????????С??-Xmx ??-Xmn ????????????????????????Minor GC?????????????????????????????????Major GC/Full GC?????????Minor GC??10???????
??????
??????JDK8????HotSpot????У??????????緽?????????????????????????????С?????????????????????????????ú??鷽??????????????У?32λ???????С?64M??64λ????85M?????????????-XX:MaxPermSize????????????????????????????С???????OOM????
??????????????JDK8??HotSpot?У??????Java??????????????????????????????????????????????棩??????????
???????????????????
?????о??????????????????????????????????С??????????????漰????????????????????????????С???????????????????????????????????Full GC???????????
????????JDK8?У?????????????????????У???????????????????????????????????????????????????????????????????????????????й??????????????????檔
????ps??JDK7????HotSpot??????????????????????洢????У?????????????е??????????????????????JDK8?У?????????????????????????????á?
????????ж?????????
????GC???????????????????????????Щ???????????????????????????ü??????????????????
????1?????ü?????
????????????????????ü????????????????????????????????????1????????????????????????1??????????0??????????????????á?
???????ü????????????ж???Ч????????????????????????????
????public class GCtest {
????private Object instance = null;
????private static final int _10M = 10 * 1
??????????-XX:+PrintGC?????????н????
????[GC (System.gc()) [PSYoungGen: 26982K->1194K(75776K)] 26982K->1202K(249344K)?? 0.0010103 secs]
??????GC????п??????objA??objB?????????????????????????滹???????????????????
????2????????????
??????????г?? “GC Roots” ???????????????Щ??????????????????·????? “??????”?????????????GC Roots??
????· ???????????????????
????· ???????о??????????????
????· ???????г???????????
????· Native????????????
????????????? GC Roots ????κ????????????ζ???????????????

????????????????У??ж????????objA????????????????????α??????
????1?????????objA?? GC Roots???????????????е???α???
????2?????????objA??д??finalize()?????????δ??й??????objA??????F-Queue?????У??????????????????????????????Finalizer????????finalize()??????finalize()???????????????????????GC???????е??????е???α??????objA??finalize()??????????????????κ???????????????????????α?????objA?????“????????”?????
???????????????
public class FinalizerTest {
public static FinalizerTest object;
public void isAlive() {
System.out.println("I'm alive");
}
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("method finalize is running");
object = this;
}
public static void main(String[] args) throws Exception {
object = new FinalizerTest();
// ???????У?finalize?????????
object = null;
System.gc();
Thread.sleep(500);
if (object != null) {
object.isAlive();
} else {
System.out.println("I'm dead");
}
// ???????У?finalize?????????й?
object = null;
System.gc();
Thread.sleep(500);
if (object != null) {
object.isAlive();
} else {
System.out.println("I'm dead");
}
}
}
??????н????
????method finalize is running
????I'm alive
????I'm dead
????????н???????????
????????η???GC???finalize??????????????????????????????????
????????η???GC???????finalize???????JVM??????Σ?object???????
??????????????????????t??????????finalize??????