JVM 垃圾回收(深入理解Java虚拟机第三章)

news2024/11/15 21:24:07

垃圾判断算法

引用计数法

每个对象增加引用计数器,引用加一,失效减一,为零判定为垃圾数据。

缺点:循环引用难以解决

根搜索算法

从树状引用链向下查找,如果对象无法找到,则标记为垃圾数据。

JVM算法

采用根搜索算法,使用虚拟机栈帧中的本地变量表的引用对象、方法区类静态属性引用对象、方法去常量引用对象、Native方法引用对象作为GC Root,向下搜索,两次未找到则标记为垃圾数据后进行回收处理。

第一次标记:标记并覆盖finalize方法,且从未调该方法的对象,放置到F-queue队列。

第二次标记:另一个线程检查F-queue,如果依然判定为垃圾数据则移除队列进行第二次标记。

JVM中的引用

  • 强引用(Strong Reference):类似Object obj=new Object这样的直接引用。永远不会回收。
  • 软引用(Soft Reference):有用但非必须的对象。抛出内存溢出异常前,将其列入回收范围,进行第二次回收。
  • 弱引用(Weak Reference):有用非必须对象。垃圾回收直接回收
  • 虚引用(PhantomReference):没有引用,仅用于在回收后得到通知。垃圾回收直接回收

垃圾回收算法

标记清除法

先标记,再清除

缺点:

1.无法得到连续内存,供其他数据使用

2.标记与清除的地址不连续,效率低

复制算法

将内存分为两部分,第一部分内存用完时,将存活对象复制到第二部分,再全部清除第一部分。

缺点:

1.可利用空间减半

2.数据存活率较高时,需要复制的数据太多

标记整理法

标记过期对象,清除过期对象,将存活对象对齐,保证占用空间连续

分代收集算法

老年代:存活率高,使用标记清理或标记整理算法

新生代:存活率低,使用复制算法

垃圾收集器

 

Serial收集器

单线程顺序收集

  • 用途:新生代、桌面程序等Client模式,采用复制算法
  • 优点:简单高效
  • 缺点:收集时造成Stop The Wold暂停所有用户线程

ParNew收集器

多线程顺序收集

  • 用途:老年代、Server模式,采用复制算法
  • 优点:多CPU环境中GC时系统资源利用效果明显
  • 缺点:暂停所有用户线程

Parallel Scavenge收集器

吞吐量优先收集器,并行多线程,使用复制算法

  • 用途:新生代、需要大量运算少量交互操作的场景,采用复制算法
  • 优点:提高吞吐量(减少GC时资源占用,提高用户代码的资源利用率)
  • 缺点:

Serial Old收集器

Serial 老年代单线程收集器,使用标记-整理算法

  • 用途:老年代桌面程序等Client模式
  • 优点:
  • 缺点:

Parallel Old收集器

Parallel Scavenge 老年代收集器,使用多线程,标记-整理算法

  • 用途:注重吞吐量的场景
  • 优点:提高用户CPU资源利用率
  • 缺点:

CMS收集器

并发低停顿收集器,使用多线程,标记-清除算法

  • 用途:互联网站、B/S 架构Server端等停顿时间短的场景
  • 优点:回收停顿时间短
  • 缺点:
  1. CPU资源占用率高,降低吞吐量
  2. 无法清除浮动垃圾
  3. 产生空间碎片过多。

G1收集器

垃圾优先收集器,老年代、年轻代混合管理, 多线程并发分代收集

内存的回收是以region作为基本单位的。Region之间是复制算法,但整体上实际可看作是标记一压缩(Mark一Compact)算法,两种算法都可以避免内存碎片。

详细说明:

https://blog.csdn.net/fengyuyeguirenenen/article/details/123483286

  • 用途:服务端应用,物理环境具有大内存
  • 优点:减少GC停顿时间的同时提高吞吐量
  • 缺点:内存占用率、  CPU利用率较CMS偏高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java反射学习

反射的概念 Reflection(反射)是Java被视为动态语言的关键 反射机制允许程序在执行期借助于Reflection API获得任何类的内部信息, 并能直接操作任意对象的内部属性及方法。 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象&…

【JavaEE】阻塞队列 + 生产者消费者模型

目录 阻塞队列 阻塞队列的使用 生产者消费者模型 模型的两个好处 1. 降低耦合 2. 削峰填谷 简单实现阻塞队列 阻塞队列 阻塞队列是在一般的队列上升级而来的。 对于队列为空时,如果还想取队列中的元素,此时阻塞队列就会进行阻塞。 对于队列为满时…

fpga的SD卡读BMP图片显示实验(SPI模式)

对于 SD 卡的 SPI 模式而言,采用的 SPI 的通信模式为模式 3,即 CPOL1,CPHA1,在 SD 卡 2.0 版本协议中,SPI_CLK 时钟频率可达 50Mhz。SD 卡的 SPI 模式,只用到了 SDIO_D3(SPI_CS)、SD…

Nacos 部署简单使用

文章目录1、前置相关知识及说明2、官网3、环境4、Nacos 和 Zookeeper、Eureka 的主要区别5、安装部署 & 启动5.1、Windows下载安装包部署单机部署集群部署测试6、使用服务端客户端 - SpringBoot 使用 Nacos Client7、运维健康检查获取配置,验证服务端是否正常异…

【DX-BT24蓝牙模块连接Arduino与手机透传教程】

【DX-BT24蓝牙模块连接Arduino与手机透传教程】1. 前言2. 接线3. 程序设计详解4. 演示效果5. 小结1. 前言 大夏龙雀科技DX-BT24&BT24-S&BT24-PA蓝牙模块,拥有5.1蓝牙协议,模块内置标准串口协议。前期设置蓝牙名称为VOR,采用默认波特率9600,详细…

JavaScript 入门基础 - 对象(五)

JavaScript 入门基础 - 对象 文章目录JavaScript 入门基础 - 对象1. 对象1.1 对象的基本理解1.2 为什么需要变量2. 创建对象的方式2.1 利用字面量创建对象2.2 变量属性函数方法的区别2.3 利用 new Object 创建对象2.4 利用构造函数创建对象3.new关键字4. 遍历对象属性5. JavaSc…

二、Promise

Promise1、回调地狱1.1 如何解决回调地狱的问题1.2 Promise 的基本概念2、基于回调函数按顺序读取文件内容3. 基于 then-fs 读取文件内容3.1 then-fs 的基本使用3.2 .then() 方法的特性3.3 基于 Promise 按顺序读取文件的内容3.4 通过 .catch 捕获错误3.4 通过 .catch 捕获错误…

基于RBAC权限控制模型的管理系统的设计与实现

文章目录一、RBAC 权限设计1.1 模型概述1.2 模型分类二、基于RBAC的后台管理系统2.1 项目概述2.2 技术选型2.3 内部处理流程2.4 功能模块展示2.5 权限控制展示2.6 下载说明一、RBAC 权限设计 1.1 模型概述 基于角色的访问控制 RBAC,是实施面向企业安全策略的一种有…

kafka的介绍和基本使用

文章目录Kafka介绍1.Kafka的使用场景2.Kafka基本概念kafka基本使用1.安装前的环境准备2.启动kafka服务器3.创建主题topic4.发送消息5.消费消息Kafka介绍 Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的 &…

载波相位误差对BPSK解调性能的影响理论推导

在上一篇博客基础上,继续讨论载波相位误差对解调性能的影响! 【通信原理】通信原理书中解调器输入端信噪比a2/(2σ2)与比特信噪比Eb/No有什么关系? 以BPSK为例,从解调原理图可以看出,当本地参考载波信号与原始载波存在相位误差时,假设相位差为 φ \varphi φ,则解调器低…

【Linux】了解磁盘/文件系统/inode

文章目录一.磁盘1.磁盘的结构2.磁盘的定位(寻找方案)3.磁盘的分区与格式化介绍二.理解inode三.ext2文件系统的存储方案一.磁盘 1.磁盘的结构 问题1:什么是磁盘? 磁盘是在冯诺依曼体系结构中几乎唯一的机械设备,机械设…

AntDB数据库助力中国移动结算中心建设

为响应中国移动集团公司IT集中化的要求:全面落实“十三五”十大战略工程,加快“推动公司IT资源一体化整合“重点专项工作。以IT系统为载体,构建高效运营支撑体系,形成集中化支撑和协同业务支撑模式,打造极致体验、高效…

列表初始化(内置类型、自定义类型)

列表初始化的特性来源于单参数的隐式类型转换。以下面这个赋值为例,我们可以理解成 先创建一个匿名对象Point(2),这个时候就变成了 Point p Point(2);然后会调用拷贝构造。 虽然隐式转换的可以这样理解,但是最后会被编译器优化成直接调用有…

[Android]Bitmap Drawable

在实际开发中&#xff0c;我们可以直接引用原始的图片&#xff0c;但是也可以通过xml的方式来描述它&#xff0c;通过xml来描述的BitmapDrawable可以设置更多效果。 <?xml version"1.0" encoding"utf-8"?> <bitmap xmlns:android"http://…

java spring IOC Bean管理操作讲解 并代码演示xml的实现方式

查看本文 需要您使用spring创建过对象管理 如果之前没有接触过 可以先查看我的文章 java 手把手带你创建一个spring入门案例 IOC 操作中 Bean管理主要有两个部分 分别是创建对象和注入属性 他们都有两种实现方式 分别是xml和注解方式实现 本文只演示xml 后续我会出注解方式的文…

第十三届蓝桥杯省赛 JAVA A组 - 蜂巢

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;蓝桥杯题解集合 &#x1f4dd;原题地址&#xff1a;蜂巢 &#x1f4e3;专栏定位&#xff1a;为想参加蓝桥别的小伙伴整理常考算法题解&#xff0c;祝大家都能…

背包问题——“0-1背包”,“完全背包”(这样讲,还能不会?)

目录 一、0-1背包 1.1、0-1背包解决的问题 1.2、dp数组定义 1.3、转移方程 1.3.1、二维dp数组 1.3.2、一维dp数组 1.4、遍历顺序 1.5、测试代码 1.6、练习 二、完全背包 2.1、完全背包解决问题 2.2、与0-1背包的区别 2.3、测试代码 2.4、拓展问题&#xff1a;装满…

【2022】13 年终总结

新年Flag 2023年&#xff0c;为了各方面能有所进步&#xff0c;列一些希望达成的目标和想做的事&#xff0c;到年底看看效果。 撰写一篇英文论文 申请到CSC 和xl去外地玩两次 想到了再加 去年Flag倒了几个&#xff1f; 一维河网水动力学模型导师说不用自己编&#xff0c;看懂…

Numpy文件交互:.npy和.npz有什么区别?

文章目录saveloadsavezsavez_compressedNumpy提供了以.npy为后缀的文件存储方案&#xff0c;与这种文件格式密切相关的读、写函数分别是np.load和np.save。通过savez可以一次性存储多个数组&#xff0c;并可通过load以键值对的形式读取出来&#xff1b;如果觉得文件太大&#x…

Mybatis缓存

内存中的一块存储空间&#xff0c;服务于某个应用程序&#xff0c;旨在将频繁读取的数据临时保存在内存中&#xff0c;便于二次快速访问。 一级缓存 SqlSession级别的缓存&#xff0c;同一个SqlSession的发起多次同构查询&#xff0c;会将数据保存在一级缓存中。 注意&#x…