Java教程

JVM知识点汇总备忘

本文主要是介绍JVM知识点汇总备忘,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

GC算法

参考文章
在这里插入图片描述

Serial

串行,单线程垃圾收集器,STOP the World现象. client 默认新生代算法,实现简单,单核环境效率高复制算法:新生代 8:1:1 minorGc, 1/10分配给suviror幸存者。

ParNew

多线程版本的Serial收集器,多用在server端的新生代收集器

mark&sweep 标记+清除

mark&compact 标记+整理

cms concurrent mark sweep

在这里插入图片描述

g1 garbage first

G1 是一款面向服务端应用的垃圾收集器,它没有新生代和老年代的概念,而是将堆划分为一块块独立的 Region。当要进行垃圾收集时,首先估计每个 Region 中垃圾的数量,每次都从垃圾回收价值最大的 Region 开始回收,因此可以获得最大的回收效率。从整体上看, G1 是基于“标记-整理”算法实现的收集器,从局部(两个 Region 之间)上看是基于“复制”算法实现的,这意味着运行期间不会产生内存空间碎片。
每个 Region 都有一个 Remembered Set,用于记录本区域中所有对象引用的对象所在的区域

GC过程

新生代 --minorGC

• MinorGC 的过程(复制->清空->互换),年龄+1,
• 16次还存活移到old区。
• Eden
• from Survivor
• to survivor

老年代–Full GC

• MajorGC 采用标记清除算法
• 大对象、对象的年龄达到老年的标准

PermGen

• 存放 Class 和 Meta(元数据)的信息

垃圾回收算法

• 垃圾确认
• 引用计数法-循环引用问题
• 可达性分析,GC root两次标记确认
• Mark Sweep-标记、清除两个阶段
• 内存碎片化严重

复制算法

• 内存一分为二,满则移动存活的对象到另一半内存,清除当前。
• 利用率低,存活对象多,效率低。

标记整理算法

• 标记阶段
• 整理阶段把存活的对象移动到一端

分代收集算法

• 新生代
• 复制算法,大部分对象要回收,复制的数据量少
• 老年代
• 标记复制算法,回收的对象少,移动的数据少。

四种引用类型

  • 强引用
    强绑定,不会被GC回收
  • 软引用 SoftReference
    内存足够时不会回收,不够时会回收
  • 弱引用 WeakReference
    不管 JVM 的内存空间是否足够,总会回收该对象占用的内存
  • 虚引用
    PhantomReference 类来实现,它不能单独使用,必须和引用队列联合使用。 虚引用的主要作用是跟踪对象被垃圾回收的状态

Java 内存区域透彻分析

在这里插入图片描述
线程内存:java内存模型中的线程的工作内存是CPU的寄存器和高速缓存的一个抽象描述
主内存
数据总线 一致性协议

为了保证共享内存的正确性(可见性、有序性、原子性),内存模型定义了共享内存系统中多线程程序读写操作行为的规范。通过这些规则来规范对内存的读写操作,从而保证指令执行的正确性。它与处理器有关、与缓存有关、与并发有关、与编译器也有关。他解决了CPU多级缓存、处理器优化、指令重排等导致的内存访问问题,保证了并发场景下的一致性、原子性和有序性。
链接
内存模型解决并发问题主要采用两种方式:限制处理器优化和使用内存屏障
JMM
零拷贝(Zero-copy)及其应用详解
参考文章

常用 jvm 参数分析

通过参数 -XX:GCTimeRadio 设置垃圾回收时间占总 CPU 时间的百分比。
通过参数 -XX:MaxGCPauseMillis 设置垃圾处理过程最久停顿时间。
通过命令 -XX:+UseAdaptiveSizePolicy 开启自适应策略。
只要设置好堆的大小和 MaxGCPauseMillis 或 GCTimeRadio,收集器会自动调整新生代的大小、Eden 和 Survivor 的比例、对象进入老年代的年龄,以最大程度上接近我们设置的 MaxGCPauseMillis 或 GCTimeRadio。
参考文章


这篇关于JVM知识点汇总备忘的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!