Java笔记4--JVM&GC

Java笔记4--JVM&GC_第1张图片
image.png
Java笔记4--JVM&GC_第2张图片
image.png

垃圾回收算法

1.引用计数法

Java笔记4--JVM&GC_第3张图片
image.png

2.复制算法 (新生代)

Java笔记4--JVM&GC_第4张图片
image.png

复制活的到空的(复 活)

Java笔记4--JVM&GC_第5张图片
image.png

复制之后有交换,谁空谁是To (To 0 --->往占用0的位置挪)
优点:没有产生内存碎片, 缺点:大对象复制耗时(所以用于新生代)

3.标记清除法 (老年代)

Java笔记4--JVM&GC_第6张图片
image.png

4.标记整理法 (老年代)

Java笔记4--JVM&GC_第7张图片
image.png
Java笔记4--JVM&GC_第8张图片
image.png
Java笔记4--JVM&GC_第9张图片
t

GC Roots 一定是从Roots开始的

可以作为GC Root的对象

Java笔记4--JVM&GC_第10张图片
image.png
Java笔记4--JVM&GC_第11张图片
image.png

盘点家底查看 JVM 默认值

  • 查看初始默认值:-XX:+PrintFlagsInitial
ginseng@ginseng-pc:~/Project/demo$ java -XX:+PrintFlagsInitial
[Global flags]
    intx ActiveProcessorCount                      = -1                                  {product}
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
    uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
    uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
    uintx AdaptiveSizePolicyWeight                  = 10                                  {product}
   ...
  • 查看修改更新:-XX:+PrintFlagsFinal
bool UsePSAdaptiveSurvivorSizePolicy           = true                                {product}
bool UseParNewGC                               = false                               {product}
bool UseParallelGC                            := true                                {product}
bool UseParallelOldGC                          = true                                {product}
bool UsePerfData                               = true                                {product}
bool UsePopCountInstruction                    = true                                {product}
bool UseRDPCForConstantTableBase               = false                               {C2 product}

= 与 := 的区别是,一个是默认,一个是人物改变或者 jvm 加载时改变的参数

工作中常用的 JVM 配置参数

Java笔记4--JVM&GC_第12张图片
image.png

永久代用的是JVM的堆内存

通过-XX:+PrintGCDetails查看GC收集日志


Java笔记4--JVM&GC_第13张图片
image.png
Java笔记4--JVM&GC_第14张图片
image.png
Java笔记4--JVM&GC_第15张图片
image.png
Java笔记4--JVM&GC_第16张图片
image.png
Java笔记4--JVM&GC_第17张图片
image.png
image.png

该参数范围只能设置0~15(java8)

引用

Java笔记4--JVM&GC_第18张图片
image.png

强引用

Java笔记4--JVM&GC_第19张图片
image.png

软引用

Java笔记4--JVM&GC_第20张图片
image.png

弱引用

image.png

软/弱引用使用场景

Java笔记4--JVM&GC_第21张图片
image.png

虚引用

Java笔记4--JVM&GC_第22张图片
image.png

GC Roots和四大引用总结

Java笔记4--JVM&GC_第23张图片
image.png

OOM(常见)

Java笔记4--JVM&GC_第24张图片
image.png
Java笔记4--JVM&GC_第25张图片
image.png

GC Overhead

Java笔记4--JVM&GC_第26张图片
image.png

Direct buffer memory

Java笔记4--JVM&GC_第27张图片
image.png

通常因为NIO导致

unable to create new native thread

Java笔记4--JVM&GC_第28张图片
image.png

Metaspace

Java笔记4--JVM&GC_第29张图片
image.png

GC 收集器

Java笔记4--JVM&GC_第30张图片
image.png

其中,G1收集器是将堆内存分割成不同的区域然后并发的对其进行垃圾回收.

Java笔记4--JVM&GC_第31张图片
image.png

java8

Java笔记4--JVM&GC_第32张图片
image.png
Java笔记4--JVM&GC_第33张图片
image.png

新生代收集器

Java笔记4--JVM&GC_第34张图片
image.png
Java笔记4--JVM&GC_第35张图片
image.png
Java笔记4--JVM&GC_第36张图片
image.png
Java笔记4--JVM&GC_第37张图片
image.png
Java笔记4--JVM&GC_第38张图片
image.png
Java笔记4--JVM&GC_第39张图片
image.png

老年代收集器

Java笔记4--JVM&GC_第40张图片
image.png
image.png

CMS4步过程


Java笔记4--JVM&GC_第41张图片
image.png

1.初始标记


image.png

2.并发标记

image.png

3.重新标记


image.png

4.并发清除

Java笔记4--JVM&GC_第42张图片
image.png

四步总结


image.png

CMS优缺点:
优:并发收集低停顿

缺:1.采用标记清除算法会导致大量内存碎片
2.并发执行对CPU压力大


Java笔记4--JVM&GC_第43张图片
image.png

缺点主要原因

如何选择垃圾收集器

Java笔记4--JVM&GC_第44张图片
image.png

G1收集器

Java笔记4--JVM&GC_第45张图片
image.png
Java笔记4--JVM&GC_第46张图片
image.png
Java笔记4--JVM&GC_第47张图片
image.png
Java笔记4--JVM&GC_第48张图片
image.png

特点


Java笔记4--JVM&GC_第49张图片
image.png

G1底层原理

Java笔记4--JVM&GC_第50张图片
image.png
Java笔记4--JVM&GC_第51张图片
image.png
Java笔记4--JVM&GC_第52张图片
image.png
Java笔记4--JVM&GC_第53张图片
image.png
Java笔记4--JVM&GC_第54张图片
image.png

回收步骤


Java笔记4--JVM&GC_第55张图片
image.png
Java笔记4--JVM&GC_第56张图片
image.png

四步


Java笔记4--JVM&GC_第57张图片
image.png

G1较与CMS的优势

Java笔记4--JVM&GC_第58张图片
image.png

你可能感兴趣的:(Java笔记4--JVM&GC)