CS-Notes/notes/JVM.md
2018-02-22 14:47:22 +08:00

27 KiB
Raw Blame History

??????

????????????????§Ö??????????????????

1. ?????????

?????????§Ö????????????????????????????§Ö??? Native ????????????

2. Java ??????

??? Java ????????§Ö????????????????›¥???????????????????????????????????????????????????????????????????????????????? Java ?????????????????????

????????????????????

  1. ???????????????????????????? StackOverflowError ????
  2. ????§Ø????????????????????—¨????? OutOfMemoryError ????

3. ????????

?? Java ?????????????????????????????????????????????????

4. Java ??

???§Ø???????????????????µµ

??????????????????????????????"GC ?? "???????????????????????¡Â?????????Java ??????????????????????????????????????? Eden ???From Survivor ???To Survivor ???????

???????????—¨??????? -Xmx ?? -Xms ???????????????§³?????????????????? OutOfMemoryError ????

5. ??????

?????????????????????????????????????????????????????????????????

?? Java ??????????????????—¨??????????????????????????????? OutOfMemoryError ????

????????????????????????????????????????????§Ø??????????????????HotSpot ?????????????????????????????????

6. ???????????

??????????????????????????

??????Class ????§Ö???????????????????????????????????????????????????????

???????????????¨´? String ??? intern() ?????????????????????

7. ??????

?? JDK 1.4 ????????? NIO ???????????????????Channel??????????Buffer???? I/O ?????????????? Native ?????????????????—¨??????????›¥?? Java ????? DirectByteBuffer ????????????????????§Ó??????????????§»????????????????????????????? Java ??? Native ????????????????

???????

?????????????????????????????????????????????§Ö????????????????????????????????????????????????????????????????????????

???????????????? Java ???????????§³?

1. ?§Ø???????????????

1.1 ???¨¹???

???????????????¨¹????????????????????????????????? 1???????§¹????????? 1??

???¨¹???? 0 ????????????

?????????????????????????????¨¹??????????? 0?????? GC ?????????????

objA.instance = objB;
objB.instance = objA;

1.2 ?????

??? GC Roots ???????????????????????????????????????????????????????

GC Roots ???????????????

  1. ????????????????
  2. ???????????????????????
  3. ???????§Ö????????????
  4. ??????????????????

1.3 ????????

????????????¨¹??????§Ø?????????????????????????????????§Ø?????????????????§Ø???????????????¨¢??§Û??

1.3.1 ?????

????????????????????????????????????????????

Object obj = new Object();

1.3.2 ??????

?????????????????????§Ý????

Object obj = new Object();
SoftReference<Object> sf = new SoftReference<Object>(obj);
obj = null;
sf.get();

sf ??? obj ??????????????? sf.get() ??????????????????????????????????????????????????? null??

????????????????????????????????????????????????????????????????????????????????????????????ÖÎ???????????????????????????????????????§»?????

1.3.3 ??????

??????›Ô???????????????????????????????????????????????????????????????

Object obj = new Object();
WeakReference<Object> wf = new WeakReference<Object>(obj);
obj = null;
wf.get();
wf.isEnQueued();

1.3.4 ??????

?????????????????????????????????????????????????????????????<3F>q??????????????????????????????????????????????????¨´?????¦·????????????????????????????????????????

Object obj = new Object();
PhantomReference<Object> pf = new PhantomReference<Object>(obj);
obj=null;
pf.get();
pf.isEnQueued();

1.3 ???????????

???????????????????????????§Ø???

?????????????§Ø???????????

???§Ø????????????????????????????????????????????????§Ø???

  1. ???????§Ö????????????????????? Java ???§Ó??????????¦Ê??????
  2. ???????? ClassLoader ??????????
  3. ???????? java.lang.Class ??????????¦Ê¦Å??????????????????¦Ê¦Å???????????????????

??????? -Xnoclassgc ???????????????????§Ø???

???????¡Â??????????CGLib ?? ByteCode ??????????? JSP ??? OSGo ???????????? ClassLoader ????????????????????§Ø?????????????????????????

1.4 finalize()

???????????????????????????§Ò????? finalize() ????????????§á???????????¡Â?????????????¡À????????????????

finalize() ???? C++ ???ûy??????????????????????????????? try-finally ????????????????????¡Â??????§Õ?????????????????????????????????????????¨°????¨¢?

2. ?????????

2.1 ??? - ?????

???????????????§Ò???????????

????

  1. ???????????§¹???????
  2. ????????????

???????????????????§Ú????

2.2 ??????

????œý?????§³???????ï…?????????????ï…??????????????????????????????????????—¨????????¨´??????????????????

??????????????????????

??????????????????????????????????????????????????????œý?????§³???????ï…???????????? Eden ?????????§³?? Survior ????????? Eden ??????????? Survivor???????????? Eden ?? Survivor ?§Ý???????????????????????? Survivor ????????????? Eden ?? Survivor??HotSpot ??????? Eden ?? Survivor ???§³???????? 8:1?????????????????? 90 %???????¦Ë????§Ø??? 10% ????????????? Survivor ?????????????????????????????§Ù????????????????????????

2.3 ??? - ??????

?????§Õ??????????????????????????????????????µµ

2.4 ????????

????????????????¡Â?????????????????????????????????????????????????œý??????ï…????????????????????

??? Java ???????????????????

  1. ????????????????
  2. ???????????? - ???? ???? ??? - ???? ????

3. ?????????

?????? HotSpot ??????§Ö? 7 ?????????????????????????????????????¨¢?

3.1 Serial ?????

??????????????????????¦Æ????????????????????????????????????????????????????????????????????????????????????????????????

???????????§¹????????? CPU ??????????????????????????????????????????????§¹???

?? Client ??¨®????§µ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

3.2 ParNew ?????

???? Serial ???????????·Ú??

?? Server ??????????????????????????????????????????????????? Serial ???????????????? CMS ?????????????

???????????????? CPU ???????????????? -XX:ParallelGCThreads ?????????????????

3.3 Parallel Scavenge ?????

????§Ö????????????

?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? CPU ??????????????????????????????

??????????????????????????????????????????????????????î•????????????????§¹??????? CPU ?????????????????????????????????????????????????????

?????????????????????????????????????????????????????? -XX:MaxGCPauseMillis ??????????????????????§³?? -XX:GCTimeRatio ???????????? 0 ??§³?? 100 ???????????????????????????????????????????????????????????????§³????????????????????????????????

????????????? -XX:+UseAdaptiveSizePolicy?????????????????????????????????????????????§³??-Xmn????Eden ?? Survivor ?????????-XX:SurvivorRatio?????????????????????-XX:PretenureSizeThreshold???????????????????????????????????????????????????????????§»???????????????????????????????????????????? GC ??????????????GC Ergonomics??????????????????????? ParNew ?????????????????

3.4 Serial Old ?????

Serial Old ?? Serial ?????????????·Ú?????? Client ????????????¨¢???????? Server ??????????????????

  1. ?? JDK 1.5 ??????·Ú??Parallel Old ????????????? Parallel Scavenge ???????????¨¢?
  2. ??? CMS ????????????????????????? Concurrent Mode Failure ???¨¢?

3.5 Parallel Old ?????

?? Parallel Scavenge ?????????????·Ú??

?????????????? CPU ??????§Ö?????????????????? Parallel Scavenge ?? Parallel Old ???????

3.6 CMS ?????

CMS??Concurrent Mark Sweep?????? Mark Sweep ?????????????? ??? - ??? ???????

??????????????????

???????????????

  1. ??????????????????? GC Roots ???????????????????????????
  2. ???????????? GC Roots Tracing ??????????????????????§Ü???????????????
  3. ???¡À?????????????????????????????????????????¡À?????????????????????????????????
  4. ??????????????????

???????????§Ü????????????????????????§µ??????????????????????????????????????????

???????????

  1. ?? CPU ??????§³?CMS ??????????????????? (CPU ???? + 3) / 4???? CPU ???? 4 ?????CMS ??????????????????¨²????????? CPU ???????????????????????????????????????????????????????????????????? 50%?????????????????????????????????????????????????????? CPU ?????????

  2. ??????????????????????????????????????????????????????????????????????????????????????????????????????????CMS ????????????§Õ????????????????????? GC ?????????????????????????????????????????????????????????????????????????§µ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????¨¢???????? -XX:CMSInitiatingOccupancyFraction ???????????????????????????????JDK 1.5 ???????????? 68?????????????????? 68% ?????????????????????????????????????????????????????—¨????????? Concurrent Mode Failure?????????????????????????????? Serial Old ??????????????????????????????

  3. ??? - ??????????????????????????????????ú‘?????????????????????????????????????????????????????¨°??????????? Full GC??

3.7 G1 ?????

G1??Garbage-First??????????????????????????????????????????????????????????????????HotSpot ?????????????????????????????¦Ä???????<3F>I?? JDK 1.5 ?§Ù????? CMS ???????

??????????

  • ??????????????????? CPU ???????????????????? CPU ????????????
  • ??????????????????????????????????????????????????????????????? GC ?????????????¨°?????????????????????????????????????? GC ???????????????????§¹????
  • ????????????????????????? - ??????????????????????????? Region ???????????????????????????????¦Æ????????????????????????
  • ??????????????????? CMS ?????????????????????? G1 ?? CMS ??????????? G1 ???????????????????????????????????????????????????????????? M ???????????????????? GC ???????¨®??? N ??????????????? Java??RTSJ??????????????????????

?? G1 ???????????????????????¦¶???????????????????????????? G1 ????????????Java ?????ÕÓ??????????????§Ü??????????? Java ???????????§³???????????Region?????????????????????????????????????????????????????????????????????????? Region???????????????????

??????????????????????????????????????§Þ????????????? Java ???§ß??????????????????????????? Region ??????????????????§³???????????????§³??????????????????????????????????????§Ò???¦È??????????????????????????? Region????????? Garbage-First ??????????????????? Region ???????????????????????????????????????????????????????????????????§¹???

Region ????????????????????????????? Region ?§µ??????????? Java ???????????????¨´?????????????????????????????????????????? Java ???????????????????? GC §¹???????????????????????????????? Region ?????????????????? Remembered Set????????????????? Reference ????????????§Õ??????????????? Write Barrier ????§Ø?§Õ????????? Reference ????????????????? Region ??§µ???????????? CardTable ???????????????????????????????? Region ?? Remembered Set ??§³?????????????????? GC ??????????¦¶?§Þ??? Remembered Set ????????????????????????????

???????????? Remembered Set ???????G1 ??????????????????????????????Ñs

  1. ??????
  2. ???????
  3. ??????????????????????????????????????????????¡À??????????????????????????????????????<3F>£????????? Remembered Set Logs ???—¨????????????? Remembered Set Logs ?????????? Remembered Set ?§³?????????????????????????§³?
  4. ??????????????? Region ?§Ö???????????????????????????????? GC ????????????????????????????????????????????????????§µ?????????????????? Region??????????????????????????????????????????§¹???

3.8 ?????????????????

????? ???§³????? or ???? ?????? / ????? ?? ??? ???¨®???
Serial ???? ?????? ?????? ?????????? ?? CPU ??????? Client ??
Serial Old ???? ????? ??? - ???? ?????????? ?? CPU ??????? Client ????CMS ??????
ParNew ???? ?????? ?????? ?????????? ?? CPU ??????? Server ?????? CMS ???
Parallel Scavenge ???? ?????? ?????? ?????????? ?????????????????????????
Parallel Old ???? ????? ??? - ???? ?????????? ?????????????????????????
CMS ???? ????? ??? - ??? ?????????? ?????????????? B/S ?????????? Java ???
G1 ???? both ??? - ???? + ?????? ?????????? ?????????????????<3F>I CMS

4. ??????????????

4.1 ?????? Eden ????

??????????????????????? Eden ???????? Eden ?????????????? Minor GC??

4.2 ????????????????

?? -XX:PretenureSizeThreshold ????????????????????????????????????? Eden ???? Survivor ???????????¿Ê???

4.3 ??????????????????

JVM ?????????????????????? Minor GC ????????? Survivor ????????????? Survivor ????????? 1?????????? Minor GC ??????????????? 1???????????????????????????????? 15 ????? -XX:MaxTenuringThreshold ???????

4.4 ????????????§Ø?

?? Survivor ????????????§Ø????§³?????? Survivor ???????????????????????????????????????????

4.5 ????????

????? Minor GC ????JVM ?????????????????????????????????????§Ø?????????????? Minor GC ???????????????????????????????????????????????¦Í????????????????????§³???????????? Minor GC??§³???????? Full GC??

4.6 Full GC ?????????

???? Minor GC?????????????????? Eden ???????????????????? Minor GC???? Full GC ?????????????????????

4.6.1 ???? System.gc()

??????????????? JVM ???? Full GC??????????????????????????????????? Full GC????????? Full GC ????????????????§¼???????????????????????????????????????????????????????????—¨????? -XX:+ DisableExplicitGC ????? RMI ???? System.gc()??

4.6.2 ??????????

??????????????????????????????????????????????????????????????????????? Full GC ??????????????????????? Java.lang.OutOfMemoryError: Java heap space ????????????????????? Full GC??????????????????????? Minor GC ??¦Á????????????????????????????¹À??????????????????î•

4.6.3 ???????????

?????????? Minor GC ???????????????????????????????? HandlePromotionFailure ????????????? Full GC??

4.6.4 JDK 1.7 ?????????????????

?? JDK 1.7 ???????HotSpot ??????§Ö??????????????????????????§Õ?????§» class ??????????????????????????????????????????????????????????????Permanet Generation ????????????¦Ä????????? CMS GC ????????????? Full GC????????? Full GC ?????????????? JVM ?????????????????java.lang.OutOfMemoryError: PermGen space ????? PermGen ?????? Full GC ????????????????? PermGen ????????? CMS GC??

?? JDK 1.8 ?????????<3F>I?????????????????????????????????—¨??????????? Full GC ????????????

4.6.5 Concurrent Mode Failure

??? CMS GC ??????????§Ø????????????????????????????????????????? CMS GC ??????????????????????????????? Full GC??????? Concurrent Mode Failure ????????? Full GC??

????????

????????????????????

1 ???????????

???????? 7 ????¦²?

  • ?????Loading??
  • ?????Verification??
  • ?????Preparation??
  • ??????Resolution??
  • ???????Initialization??
  • ????Using??
  • §Ø???Unloading??

???§ß??????????§»???????????????????????????????????? Java ???????

2. ?????????

??????œZ?§Ó????????????????§Þ????????œZ???ÕÇ?????????????????????????????§Ô??????( ???????????????????????? )

  1. ???? new??getstatic??putstatic??invokestatic ????????????????????????§ß??§Û?????????????????????????????????????? 4 ??????????????? new ????????????????????????????????????¦²??? final ???¦±???????????????????????????¦Ã????????????????????????????????

  2. ??? java.lang.reflect ?????????????§Ù?????????????????§ß??§Ô????????????????????????

  3. ????????????????????????Íè????§ß??§Û???????????????????Íè?????????

  4. ?????????????????????????????§Ö????????? main() ?????????????????????????????????

  5. ????? jdk1.7 ???????????????????? java.lang.invoke.MethodHandle ?????????????? REF_getStatic, REF_putStatic, REF_invokeStatic ???????????????????????????????????§ß??§Û??????????????????????????

???? 5 ??????§Ö????????????????????????¨¢??????????????????????????????????????????????¨¢??????????????????????

1. ???????????????????¦²?????????????????

System.out.println(SubClass.value); // value ????? SuperClass ?§Ø???

2. ??????úE????????????????????????????¨´?????????????§Ô???????????????????????????????????????? Object ?????????§Ñ????????????????????

SuperClass[] sca = new SuperClass[10];

3. ??????????¦Ë????????????????§µ??????????????????????<3F>i?????????????????<3F>i?????????????

System.out.println(ConstClass.HELLOWORLD);

3. ????????

???????????????????????????????? 5 ????¦±?

3.1 ????

?????????????????¦²???????????

?????????????????????

  1. ????????????????????????????????????????
  2. ????????????????????ݴ????????????????????ݴ????
  3. ???????????????????????? Class ??????????????????????????????????

???§Ø??????????????????¡¤???§Ý????

  • ?? ZIP ???????????????????????? JAR??EAR??WAR ??????????
  • ???????§Ý?????????????????????? Applet??
  • ???????????????????????????????????????????? java.lang.reflect.Proxy ?§µ????????? ProxyGenerator.generateProxyClass ????????????????????
  • ??????????????????????? JSP ???????? JSP ??????????? Class ??
  • ????????????????????????????????§»?§Þ???????????? SAP Netweaver????????????????????????????????????????????? ...

3.2 ???

??? Class ???????????§Ñ??????????????????????????????¦²????????????????

????????? 4 ????¦²?

  1. ?????????
  2. ???????????????????????????????????????
  3. ??????????????????????????????????????????????????????????????????????????§µ???????
  4. ???????????

3.3 ???

???????? static ???¦Å????????????????????????g???¨®????????????????????µµ

????????????????¦Ç?????—¨???????????????????????????????? Java ???§³?

???????? 0 ????????????????? value ???????? 0 ?????? 123??

public static int value = 123;

??????????????????????????????§Ô??????????????? 0??

public static final int value = 123;

3.4 ????

?????????????????<3F>I?????????????

3.5 ?????

???????¦Ì??????????????? <clinit>() ??????????

???????¦²?????????????????????????????????????¦²?????????????????????????????????????????????????

<clinit>() ???????????????

  • ???????????????????????????????????????????÷Ïstatic{} ?ï‚?§Ö???????????????????????????????????????§Ô??????????????????????????????????????????????????????????????????????????????????????????????????
public class Test {
    static {
        i = 0;                // ????????????????????????
        System.out.print(i);  // ????????????????????????¨¢?
    }
    static int i = 1;
}
  • ?????????????????????????? <init>()??????????????????????????????????????????????????? <clinit>() ????????????????? <clinit>() ?????????§ß??????????????§Ö??????? <clinit>() ??????????? java.lang.Object??

  • ???????? <clinit>() ????????§µ??????¦Æ??????§Ø???????????????????????????????????????????

static class Parent {
        public static int A = 1;
        static {
            A = 2;
        }
}

static class Sub extends Parent {
        public static int B = A;
}

public static void main(String[] args) {
        System.out.println(Sub.B);  // ????????????§Ö???????? A??????? 2
}
  • <clinit>() ??????????????????????????????§Ó???????????ï…???§Ø???????????????????????????????????? <clinit>() ??????

  • ????§Ó?????????????ï…??????????????????????????????????????????????? <clinit>() ???????????????????????§ß??? <clinit>() ?????????????§Ú????? <clinit>() ????????§Ö???????§Ø????????????????????????????????????????????????????????§ß??? <clinit>() ??????

  • ?????????????? <clinit>() ??????????????¡À????????????????????????????????????????????????????????? <clinit>() ???????????????????????????????????? <clinit>() ??????????????????? <clinit>() ???????§Ü??????????????????????????????????????§Õ????????????¦±?

4. ???????

????????????????????§Ö????????????????????????????????????????? ( ??????? )???????????? Java ???????????????????¨®???????????????????????????????????????????????????????????

4.1 ???????????

???????????????????????????????????????????????????? Java ??????§Ö?¦·??????????????????????????????????????????????????????????????????????????????????????? Class ????? equals() ??????isAssignableFrom() ??????isInstance() ????????????????????? instanceof() ????????????????????§Ø?????????????????????????????????????????????????????ÈÉ??????????????????????? Class ???????????????????????????????????????????????????????????????

4.2 ???????????

?? Java ?????????????????????????????????????????

??????????????????Bootstrap ClassLoader???????????????? C++ ??????????????????????????????????????????????????§»???? Java ???????????????????????????????????? java.lang.ClassLoader??

?? Java ??????????????????????????????????§»??

  • ?????????????Bootstrap ClassLoader?? ????????????????? <JAVA_HOME>\lib ???§Ö??????? -Xbootclasspath ???????????¡¤???§Ö?????????????????????????????????? rt.jar???????????????????? lib ??????????????????????????????§³? ???????????????? Java ??????????????????§Õ????????????????????????????????????????????????????? null ???<3F>r?¨À?

  • ????????????Extension ClassLoader?? ?????????????? ExtClassLoader??sun.misc.Launcher$ExtClassLoader????????????? <Java_Home>/lib/ext ????? java.ext.dir ???????????¡¤???§Ö????????????????§µ????????????????????????????

  • ??¨®????????????Application ClassLoader?? ?????????????? AppClassLoader??sun.misc.Launcher$AppClassLoader??????????????????????? ClassLoader ?§Ö? getSystemClassLoader() ?????????????????????????????????????????????¡¤????ClassPath??????????????????????????????????????????????¨®?????????????????????????????????????????????????????????????

4.3 ?????????

??¨®?????????????????????????§Þ?????????§Ò?????????????????????????????????????????????????¦É??????????????????????????Parents Delegation Model??????????????????????????????????????????????????????????????????????????????????????????????Composition??????????????????????§µ?Inheritance??????????

????????

??????????????????????????????????????????????????????????????????????????????????¦Å?????????????????¦Å?ï…??????§Ö?????????????????????????????????????§µ???§Ö??????????????????????????????????????¦¶?????????????????????????????????????

???

??????????????????????????????????? Java ??????????????????????????????????????¦É?????????? java.lang.Object????????? rt.jar ?§µ??????????????????????????????????????????????????????????????§Þ??????? Object ???????????????????????§Ø????????????????????????????????????????????§Þ???????????????§Õ??????????java.lang.Object ?????????????? ClassPath ?§µ??????§ß????????????? Object ????????????????????????????§Õ????? rt.jar ????????????????? Java ??????????????????????????????????????§³?

???

protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException{
    //check the class has been loaded or not
    Class c = findLoadedClass(name);
    if(c == null) {
        try{
            if(parent != null) {
                c = parent.loadClass(name, false);
            } else{
                c = findBootstrapClassOrNull(name);
            }
        } catch(ClassNotFoundException e) {
            //if throws the exception , the father can not complete the load
        }
        if(c == null) {
            c = findClass(name);
        }
    }
    if(resolve) {
        resolveClass(c);
    }
    return c;
}

JVM ????

GC ???????

???? ????
-Xms ???????????§³
-Xmx ?????????
-Xmn ????????§³
-XX:PermSize ????????????§³
-XX:MaxPermSize ????????????

GC ????????

???? ????
-XX:+UseSerialGC ??????????????
-XX:+UseParallelGC ??????????????
-XX:+UseConcMarkSweepGC ????????????????????
-XX:ParallelCMSThreads= ???????????????????? = ????????????
-XX:+UseG1GC G1 ??????????
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC -jar java-application.jar