• 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。
    参考文章

    如何利用 VisualVM 对高并发项目进行性能分析

    参考文章

  • 相关阅读:
    jQuery中获取元素的属性方法attr()简单用法
    【经验】angularjs 实现带查找筛选功能的select下拉框
    【经验】Angularjs 中使用 layDate 日期控件
    在 VPS 上一键安装KMS服务脚本
    Windows 使用 TCPing 工具来获取 TCP延迟、端口通顺情况、已禁Ping服务器的延迟
    Linux 初级教程:初步进入 Linux 世界
    Debian/Ubuntu TCP拥塞控制技术 ——TCP-BBR 一键安装脚本
    Linux 下 iptables 配置详解
    在 Ubuntu 上安装 LaTeX
    代码审计学习之反射型XSS
  • 原文地址:https://www.cnblogs.com/coding-now/p/14660569.html
Copyright © 2020-2023  润新知