mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-10-20 15:53:41 +00:00
674 lines
27 KiB
Markdown
674 lines
27 KiB
Markdown
<!-- GFM-TOC -->
|
|
* [??????](#??????)
|
|
* [1. ?????????](#1-?????????)
|
|
* [2. Java ??????](#2-java-??????)
|
|
* [3. ????????](#3-????????)
|
|
* [4. Java ??](#4-java-??)
|
|
* [5. ??????](#5-??????)
|
|
* [6. ???????????](#6-???????????)
|
|
* [7. ??????](#7-??????)
|
|
* [???????](#???????)
|
|
* [1. ?忪???????????????](#1-?忪???????????????)
|
|
* [1.1 ???邦???](#11-???邦???)
|
|
* [1.2 ?????](#12-?????)
|
|
* [1.3 ????????](#13-????????)
|
|
* [1.3.1 ?????](#131-?????)
|
|
* [1.3.2 ??????](#132-??????)
|
|
* [1.3.3 ??????](#133-??????)
|
|
* [1.3.4 ??????](#134-??????)
|
|
* [1.3 ???????????](#13-???????????)
|
|
* [1.4 finalize()](#14-finalize)
|
|
* [2. ?????????](#2-?????????)
|
|
* [2.1 ??? - ?????](#21-???---?????)
|
|
* [2.2 ??????](#22-??????)
|
|
* [2.3 ??? - ??????](#23-???---??????)
|
|
* [2.4 ????????](#24-????????)
|
|
* [3. ?????????](#3-?????????)
|
|
* [3.1 Serial ?????](#31-serial-?????)
|
|
* [3.2 ParNew ?????](#32-parnew-?????)
|
|
* [3.3 Parallel Scavenge ?????](#33-parallel-scavenge-?????)
|
|
* [3.4 Serial Old ?????](#34-serial-old-?????)
|
|
* [3.5 Parallel Old ?????](#35-parallel-old-?????)
|
|
* [3.6 CMS ?????](#36-cms-?????)
|
|
* [3.7 G1 ?????](#37-g1-?????)
|
|
* [3.8 ?????????????????](#38-?????????????????)
|
|
* [4. ??????????????](#4-??????????????)
|
|
* [4.1 ?????? Eden ????](#41-??????-eden-????)
|
|
* [4.2 ????????????????](#42-????????????????)
|
|
* [4.3 ??????????????????](#43-??????????????????)
|
|
* [4.4 ????????????忪?](#44-????????????忪?)
|
|
* [4.5 ????????](#45-????????)
|
|
* [4.6 Full GC ?????????](#46-full-gc-?????????)
|
|
* [4.6.1 ???? System.gc()](#461-????-systemgc)
|
|
* [4.6.2 ??????????](#462-??????????)
|
|
* [4.6.3 ???????????](#463-???????????)
|
|
* [4.6.4 JDK 1.7 ?????????????????](#464-jdk-17-?????????????????)
|
|
* [4.6.5 Concurrent Mode Failure](#465-concurrent-mode-failure)
|
|
* [????????](#????????)
|
|
* [1 ???????????](#1-???????????)
|
|
* [2. ?????????](#2-?????????)
|
|
* [3. ????????](#3-????????)
|
|
* [3.1 ????](#31-????)
|
|
* [3.2 ???](#32-???)
|
|
* [3.3 ???](#33-???)
|
|
* [3.4 ????](#34-????)
|
|
* [3.5 ?????](#35-?????)
|
|
* [4. ???????](#4-???????)
|
|
* [4.1 ???????????](#41-???????????)
|
|
* [4.2 ???????????](#42-???????????)
|
|
* [4.3 ?????????](#43-?????????)
|
|
* [JVM ????](#jvm-????)
|
|
* [GC ???????](#gc-???????)
|
|
* [GC ????????](#gc-????????)
|
|
<!-- GFM-TOC -->
|
|
|
|
# ??????
|
|
|
|

|
|
|
|
????????????????快??????????????????
|
|
|
|
## 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 ?????????????
|
|
|
|
```java
|
|
objA.instance = objB;
|
|
objB.instance = objA;
|
|
```
|
|
|
|
### 1.2 ?????
|
|
|
|
??? GC Roots ???????????????????????????????????????????????????????
|
|
|
|
GC Roots ???????????????
|
|
|
|
1. ????????????????
|
|
2. ???????????????????????
|
|
3. ???????快????????????
|
|
4. ??????????????????
|
|
|
|
### 1.3 ????????
|
|
|
|
????????????邦??????忪?????????????????????????????????忪?????????????????忪???????????????芍??抄??
|
|
|
|
#### 1.3.1 ?????
|
|
|
|
????????????????????????????????????????????
|
|
|
|
```java
|
|
Object obj = new Object();
|
|
```
|
|
|
|
#### 1.3.2 ??????
|
|
|
|
|
|
?????????????????????抖????
|
|
|
|
```java
|
|
Object obj = new Object();
|
|
SoftReference<Object> sf = new SoftReference<Object>(obj);
|
|
obj = null;
|
|
sf.get();
|
|
```
|
|
|
|
sf ??? obj ??????????????? sf.get() ??????????????????????????????????????????????????? null??
|
|
|
|
????????????????????????????????????????????????????????????????????????????????????????????笥???????????????????????????????????????宏?????
|
|
|
|
|
|
#### 1.3.3 ??????
|
|
|
|
??????圿???????????????????????????????????????????????????????????????
|
|
|
|
```java
|
|
Object obj = new Object();
|
|
WeakReference<Object> wf = new WeakReference<Object>(obj);
|
|
obj = null;
|
|
wf.get();
|
|
wf.isEnQueued();
|
|
```
|
|
|
|
#### 1.3.4 ??????
|
|
|
|
?????????????????????????????????????????????????????????????�??????????????????????????????????????????????????迄?????朵????????????????????????????????????????
|
|
|
|
```java
|
|
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++ ???鏓??????????????????????????????? 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 ?????????????????????????????汛???????䣺?? 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 ??????????????????????????????帩
|
|
|
|
1. ??????
|
|
2. ???????
|
|
3. ??????????????????????????????????????????????㊣??????????????????????????????????????�????????? 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 | ??? - ???? + ?????? | ?????????? | ?????????????????䣺 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. ?????????
|
|
|
|
??????涏?志????????????????技????????涏???梀?????????????????????????????忍??????( ???????????????????????? )
|
|
|
|
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\. ???????????????????曳?????????????????
|
|
|
|
```java
|
|
System.out.println(SubClass.value); // value ????? SuperClass ?忪???
|
|
```
|
|
|
|
2\. ??????䊵????????????????????????????迄?????????????忍???????????????????????????????????????? Object ?????????忘????????????????????
|
|
|
|
```java
|
|
SuperClass[] sca = new SuperClass[10];
|
|
```
|
|
|
|
3\. ??????????竹????????????????孝??????????????????????幂?????????????????幂?????????????
|
|
|
|
```java
|
|
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 ???汍????????????????????????𢶷???車????????????????????紫
|
|
|
|
????????????????灰?????秄???????????????????????????????? Java ???妊?
|
|
|
|
???????? 0 ????????????????? value ???????? 0 ?????? 123??
|
|
|
|
```java
|
|
public static int value = 123;
|
|
```
|
|
|
|
??????????????????????????????忍??????????????? 0??
|
|
|
|
```java
|
|
public static final int value = 123;
|
|
```
|
|
|
|
### 3.4 ????
|
|
|
|
?????????????????䣺?????????????
|
|
|
|
### 3.5 ?????
|
|
|
|
???????米??????????????? <clinit>() ??????????
|
|
|
|
???????曳?????????????????????????????????????曳?????????????????????????????????????????????????
|
|
|
|
<clinit>() ???????????????
|
|
|
|
- ???????????????????????????????????????????龢static{} ?�?快???????????????????????????????????????忍??????????????????????????????????????????????????????????????????????????????????????????????????
|
|
|
|
```java
|
|
public class Test {
|
|
static {
|
|
i = 0; // ????????????????????????
|
|
System.out.print(i); // ????????????????????????芍?
|
|
}
|
|
static int i = 1;
|
|
}
|
|
```
|
|
|
|
- ?????????????????????????? <init>()??????????????????????????????????????????????????? <clinit>() ????????????????? <clinit>() ?????????扶??????????????快??????? <clinit>() ??????????? java.lang.Object??
|
|
|
|
- ???????? <clinit>() ????????孝??????汎??????忪???????????????????????????????????????????
|
|
|
|
```java
|
|
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 ??????????????????????????????????????妊?
|
|
|
|
**???**
|
|
|
|
```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
|
|
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC -jar java-application.jar
|
|
```
|