daily commit

This commit is contained in:
2022-04-13 15:53:57 +08:00
parent 1763f67e34
commit 9e408f7516
15 changed files with 770 additions and 704 deletions

View File

@@ -1,54 +1,54 @@
# 垃圾回收器
* ## 垃圾回收器分类:
* 串行垃圾回收器:
* 单线程情况下使用
* 吞吐量优先的垃圾回收器:
* 适合在多线程情况下使用
* 其会让单位时间内STW时间之和尽可能变短
* 响应时间优先的垃圾回收器:
* 同样适用于多核cpu情况
* 其会尽可能让单次垃圾回的STW时间变短
* ## 串行垃圾回收器:
* 开启串行垃圾回收器:
```java
// 可以通过指定JVM参数来指定使用串行垃圾回收器
// 其会使用Serial和Serial Old来作为垃圾回收器
// Serial年轻代垃圾回收器使用复制算法
// Serial Old老年代垃圾回收器使用标记整理算法
-XX+UseSerialGC
```
* 串行垃圾回收器的回收流程:
* 串行垃圾回收器只有一个垃圾回收的线程,当垃圾回收线程进行垃圾回收时,会暂停所有的用户线程,直到垃圾回收完成后用户线程才继续运行
* ## 吞吐量优先的垃圾回收器:
* 开启吞吐量优先的垃圾回收器:
```java
// 指定JVM参数-XX:+UseParallelGC可以开启吞吐量优先的垃圾回收器
// 其是JDK1.8环境下的默认垃圾回收器
// 其会允许多个垃圾回收线程并行的执行垃圾回收工作
-XX+UseParallelGC
```
* ## 响应时间优先的垃圾回收器:
* 响应时间优先的垃圾回收器采用cms垃圾回收其作为老年代垃圾回收器而使用ParNewGC作为新生代垃圾回收器
```java
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
```
* CMS垃圾回收工作流程
* 初始标记此时需要STW用户线程会暂停
* 并发标记:并发标记时用户线程不需要暂停
* 再标记再标记时用户线程需要暂停会产生STW
* 并发清除此阶段用户线程不会暂停不需要STW
* CMS垃圾回收缺点
* 在CMS进行并发清除时并没有STW其他用户线程在运行时可能会产生垃圾。产生的垃圾在这次垃圾回收时无法被回收会留给下一次垃圾回收时进行清理。留给下一次垃圾回收进行清理的垃圾称之为浮动垃圾。、
* CMS垃圾回收器采用的是标记清除算法在长时间运行后可能会产生内存碎片。在产生内存碎片过多后CMS会退化为Serial Old垃圾回收器并通过标记整理算法来避免内存碎片过多的情况
* ## G1垃圾回收器
* G1垃圾回收器特性
* G1垃圾回收器同时注重了低延时和吞吐量
* G1垃圾回收器适合与超大堆内存的管理
* G1垃圾回收器会将对内存划分为多个大小相等的Region每个Region可以独立作为Eden区、Surivor区或老年代区域
* G1垃圾回收气整体上采用的是标记整理算法但是两个Region之间采用的是复制算法
* G1垃圾回收器的开启操作
```java
// 通过指定JVM参数开启G1垃圾回收器
-XX:+UseG1GC
# 垃圾回收器
* ## 垃圾回收器分类:
* 串行垃圾回收器:
* 单线程情况下使用
* 吞吐量优先的垃圾回收器:
* 适合在多线程情况下使用
* 其会让单位时间内STW时间之和尽可能变短
* 响应时间优先的垃圾回收器:
* 同样适用于多核cpu情况
* 其会尽可能让单次垃圾回的STW时间变短
* ## 串行垃圾回收器:
* 开启串行垃圾回收器:
```java
// 可以通过指定JVM参数来指定使用串行垃圾回收器
// 其会使用Serial和Serial Old来作为垃圾回收器
// Serial年轻代垃圾回收器使用复制算法
// Serial Old老年代垃圾回收器使用标记整理算法
-XX+UseSerialGC
```
* 串行垃圾回收器的回收流程:
* 串行垃圾回收器只有一个垃圾回收的线程,当垃圾回收线程进行垃圾回收时,会暂停所有的用户线程,直到垃圾回收完成后用户线程才继续运行
* ## 吞吐量优先的垃圾回收器:
* 开启吞吐量优先的垃圾回收器:
```java
// 指定JVM参数-XX:+UseParallelGC可以开启吞吐量优先的垃圾回收器
// 其是JDK1.8环境下的默认垃圾回收器
// 其会允许多个垃圾回收线程并行的执行垃圾回收工作
-XX+UseParallelGC
```
* ## 响应时间优先的垃圾回收器:
* 响应时间优先的垃圾回收器采用cms垃圾回收其作为老年代垃圾回收器而使用ParNewGC作为新生代垃圾回收器
```java
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
```
* CMS垃圾回收工作流程
* 初始标记此时需要STW用户线程会暂停
* 并发标记:并发标记时用户线程不需要暂停
* 再标记再标记时用户线程需要暂停会产生STW
* 并发清除此阶段用户线程不会暂停不需要STW
* CMS垃圾回收缺点
* 在CMS进行并发清除时并没有STW其他用户线程在运行时可能会产生垃圾。产生的垃圾在这次垃圾回收时无法被回收会留给下一次垃圾回收时进行清理。留给下一次垃圾回收进行清理的垃圾称之为浮动垃圾。、
* CMS垃圾回收器采用的是标记清除算法在长时间运行后可能会产生内存碎片。在产生内存碎片过多后CMS会退化为Serial Old垃圾回收器并通过标记整理算法来避免内存碎片过多的情况
* ## G1垃圾回收器
* G1垃圾回收器特性
* G1垃圾回收器同时注重了低延时和吞吐量
* G1垃圾回收器适合与超大堆内存的管理
* G1垃圾回收器会将对内存划分为多个大小相等的Region每个Region可以独立作为Eden区、Surivor区或老年代区域
* G1垃圾回收气整体上采用的是标记整理算法但是两个Region之间采用的是复制算法
* G1垃圾回收器的开启操作
```java
// 通过指定JVM参数开启G1垃圾回收器
-XX:+UseG1GC
```

View File

@@ -1,8 +1,8 @@
# 类加载过程
* ## 类加载过程
* 加载次过程中会根据要加载类的全类名获取该类字节吗文件的二进制流并且将其加载到内存的方法区中。并且为该要加载的类生成一个Class对象可以作为方法区类数据的访问入口
* 链接:链接过程又分为验证、准备、解析三个阶段
* 验证:验证文件格式是否正确,并且加载的字节码数据能否被正确
* 准备:正式为类变量(静态变量)分配内存空间并且设置默认初始值
* 解析:将常量池中的符号引用替换为直接引用的过程
# 类加载过程
* ## 类加载过程
* 加载次过程中会根据要加载类的全类名获取该类字节吗文件的二进制流并且将其加载到内存的方法区中。并且为该要加载的类生成一个Class对象可以作为方法区类数据的访问入口
* 链接:链接过程又分为验证、准备、解析三个阶段
* 验证:验证文件格式是否正确,并且加载的字节码数据能否被正确
* 准备:正式为类变量(静态变量)分配内存空间并且设置默认初始值
* 解析:将常量池中的符号引用替换为直接引用的过程
* 初始化初始化阶段会调用clinit方法调用该方法会为类变量进行赋值操作对于用final修饰的类变量除外其并不是在clinit阶段被赋予最终值而是在准备阶段就赋予了最终值