27 KiB
- ??????
- ???????
- ????????
- JVM ????
??????
????????????????§Ö??????????????????
1. ?????????
?????????§Ö????????????????????????????§Ö??? Native ????????????
2. Java ??????
??? Java ????????§Ö????????????????›¥???????????????????????????????????????????????????????????????????????????????? Java ?????????????????????
????????????????????
- ???????????????????????????? StackOverflowError ????
- ????§Ø????????????????????—¨????? 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.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 ???????????
???????????????????????????§Ø???
?????????????§Ø???????????
???§Ø????????????????????????????????????????????????§Ø???
- ???????§Ö????????????????????? Java ???§Ó??????????¦Ê??????
- ???????? ClassLoader ??????????
- ???????? java.lang.Class ??????????¦Ê¦Å??????????????????¦Ê¦Å???????????????????
??????? -Xnoclassgc ???????????????????§Ø???
???????¡Â??????????CGLib ?? ByteCode ??????????? JSP ??? OSGo ???????????? ClassLoader ????????????????????§Ø?????????????????????????
1.4 finalize()
???????????????????????????§Ò????? finalize() ????????????§á???????????¡Â?????????????¡À????????????????
finalize() ???? C++ ???ûy??????????????????????????????? try-finally ????????????????????¡Â??????§Õ?????????????????????????????????????????¨°????¨¢?
2. ?????????
2.1 ??? - ?????
???????????????§Ò???????????
????
- ???????????§¹???????
- ????????????
???????????????????§Ú????
2.2 ??????
????œý?????§³???????ï…?????????????ï…??????????????????????????????????????—¨????????¨´??????????????????
??????????????????????
??????????????????????????????????????????????????????œý?????§³???????ï…???????????? Eden ?????????§³?? Survior ????????? Eden ??????????? Survivor???????????? Eden ?? Survivor ?§Ý???????????????????????? Survivor ????????????? Eden ?? Survivor??HotSpot ??????? Eden ?? Survivor ???§³???????? 8:1?????????????????? 90 %???????¦Ë????§Ø??? 10% ????????????? Survivor ?????????????????????????????§Ù????????????????????????
2.3 ??? - ??????
?????§Õ??????????????????????????????????????µµ
2.4 ????????
????????????????¡Â?????????????????????????????????????????????????œý??????ï…????????????????????
??? Java ???????????????????
- ????????????????
- ???????????? - ???? ???? ??? - ???? ????
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 ??????????????????
- ?? JDK 1.5 ??????·Ú??Parallel Old ????????????? Parallel Scavenge ???????????¨¢?
- ??? CMS ????????????????????????? Concurrent Mode Failure ???¨¢?
3.5 Parallel Old ?????
?? Parallel Scavenge ?????????????·Ú??
?????????????? CPU ??????§Ö?????????????????? Parallel Scavenge ?? Parallel Old ???????
3.6 CMS ?????
CMS??Concurrent Mark Sweep?????? Mark Sweep ?????????????? ??? - ??? ???????
??????????????????
???????????????
- ??????????????????? GC Roots ???????????????????????????
- ???????????? GC Roots Tracing ??????????????????????§Ü???????????????
- ???¡À?????????????????????????????????????????¡À?????????????????????????????????
- ??????????????????
???????????§Ü????????????????????????§µ??????????????????????????????????????????
???????????
-
?? CPU ??????§³?CMS ??????????????????? (CPU ???? + 3) / 4???? CPU ???? 4 ?????CMS ??????????????????¨²????????? CPU ???????????????????????????????????????????????????????????????????? 50%?????????????????????????????????????????????????????? CPU ?????????
-
??????????????????????????????????????????????????????????????????????????????????????????????????????????CMS ????????????§Õ????????????????????? GC ?????????????????????????????????????????????????????????????????????????§µ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????¨¢???????? -XX:CMSInitiatingOccupancyFraction ???????????????????????????????JDK 1.5 ???????????? 68?????????????????? 68% ?????????????????????????????????????????????????????—¨????????? Concurrent Mode Failure?????????????????????????????? Serial Old ??????????????????????????????
-
??? - ??????????????????????????????????ú‘?????????????????????????????????????????????????????¨°??????????? 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
- ??????
- ???????
- ??????????????????????????????????????????????¡À??????????????????????????????????????<3F>£????????? Remembered Set Logs ???—¨????????????? Remembered Set Logs ?????????? Remembered Set ?§³?????????????????????????§³?
- ??????????????? 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???ÕÇ?????????????????????????????§Ô??????( ???????????????????????? )
-
???? new??getstatic??putstatic??invokestatic ????????????????????????§ß??§Û?????????????????????????????????????? 4 ??????????????? new ????????????????????????????????????¦²??? final ???¦±???????????????????????????¦Ã????????????????????????????????
-
??? java.lang.reflect ?????????????§Ù?????????????????§ß??§Ô????????????????????????
-
????????????????????????Íè????§ß??§Û???????????????????Íè?????????
-
?????????????????????????????§Ö????????? main() ?????????????????????????????????
-
????? 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 ????
?????????????????¦²???????????
?????????????????????
- ????????????????????????????????????????
- ????????????????????ݴ????????????????????ݴ????
- ???????????????????????? Class ??????????????????????????????????
???§Ø??????????????????¡¤???§Ý????
- ?? ZIP ???????????????????????? JAR??EAR??WAR ??????????
- ???????§Ý?????????????????????? Applet??
- ???????????????????????????????????????????? java.lang.reflect.Proxy ?§µ????????? ProxyGenerator.generateProxyClass ????????????????????
- ??????????????????????? JSP ???????? JSP ??????????? Class ??
- ????????????????????????????????§»?§Þ???????????? SAP Netweaver????????????????????????????????????????????? ...
3.2 ???
??? Class ???????????§Ñ??????????????????????????????¦²????????????????
????????? 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