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 ??????
?????????????????????????????????????????????????????????????�??????????????????????????????????????????????????迄?????朵????????????????????????????????????????
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++ ???鏓??????????????????????????????? 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 ?????????????????????????????汛???????䣺?? 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 ??????????????????????????????帩
- ??????
- ???????
- ??????????????????????????????????????????????㊣??????????????????????????????????????�????????? 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 | ??? - ???? + ?????? | ?????????? | ?????????????????䣺 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 ?????????䣺?????????????????????????????????秄??????????? 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. ?????????
??????涏?志????????????????技????????涏???梀?????????????????????????????忍??????( ???????????????????????? )
-
???? 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. ??????䊵????????????????????????????迄?????????????忍???????????????????????????????????????? Object ?????????忘????????????????????
SuperClass[] sca = new SuperClass[10];
3. ??????????竹????????????????孝??????????????????????幂?????????????????幂?????????????
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 ???汍????????????????????????𢶷???車????????????????????紫
????????????????灰?????秄???????????????????????????????? Java ???妊?
???????? 0 ????????????????? value ???????? 0 ?????? 123??
public static int value = 123;
??????????????????????????????忍??????????????? 0??
public static final int value = 123;
3.4 ????
?????????????????䣺?????????????
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 ???𩼣?阱?
-
????????????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












