Java垃圾回收_1

news2024/11/18 17:39:46

一、垃圾回收

1.如何判断对象可以回收

(1)引用计数法

存在循环引用问题, Java未使用这种算法

在引用计数法中,每个对象都有一个引用计数器,记录着指向该对象的引用数量。当引用计数器为零时,表示没有任何引用指向该对象,该对象可以被释放,回收其占用的内存。
在这里插入图片描述

(2)可达性分析法

根对象:肯定不能被垃圾回收的对象

在这里插入图片描述

2.Java引用类型

1.强引用

被GC-Root引用

2.软引用

没有被强引用, 垃圾回收时内存不够,软引用被回收

3.弱引用

没有强引用,只要发生垃圾回收,弱引用会被回收掉

软引用 弱引用也占用一定的内存,对 它两进行释放,通过引用队列

在这里插入图片描述

4. 虚引用

必须配合引用队列使用,虚引用对象被垃圾回收时,虚引用 自己放入引用队列,由一个线程释放内存

在这里插入图片描述

在这里插入图片描述

5.终结器引用

Object中有finallize方法,对象重写finallize方法 ,并且没有强引用 引用它,可以被当作垃圾回收

在这里插入图片描述

在这里插入图片描述

软引用实例

在这里插入图片描述

弱引用实例在这里插入图片描述

垃圾回收算法

1.标记清除算法

标记清除算法(Mark-Sweep Algorithm)是一种常见的垃圾回收算法,用于自动管理动态分配的内存空间。其原理如下:

标记阶段(Mark):从根对象开始,通过引用链追踪,标记所有的活动对象。标记过程中,将活动对象的标记位设置为有效状态,表示这些对象是可达的,不会被回收。

清除阶段(Sweep):在标记阶段完成后,遍历整个内存空间,将未被标记的对象视为垃圾对象,将其所占用的内存空间释放,以便下次分配给新的对象使用。

优点:速度快
缺点:容易造成内存碎片
标记清除算法通过标记和清除的过程,将不再被使用的内存空间回收,以避免内存泄漏和内存碎片的问题。
然而,标记清除算法也存在一些缺点,如清除阶段会产生内存碎片,可能会导致内存分配的效率降低。

在这里插入图片描述

2.标记整理算法

在这里插入图片描述

  • 标记阶段:
    与其他垃圾回收算法一样,标记-整理算法从根对象开始遍历整个对象图,标记所有与根对象可达的对象,即被引用的对象。
  • 整理阶段:
    在整理阶段,标记-整理算法会对内存空间进行整理,将所有存活的对象移动到一端,而未标记的对象则被认为是垃圾对象。
    移动存活对象的过程中,标记-整理算法会保持存活对象之间的相对位置关系,从而确保所有存活对象在整理后仍然是连续的。
  • 回收阶段:
    在整理阶段完成后,标记-整理算法会回收并释放未标记的垃圾对象所占用的内存空间,从而实现垃圾回收。

优点:没有内存碎片
缺点:速度慢

3.复制算法

在这里插入图片描述

在这里插入图片描述

复制算法的基本思想是将内存空间划分为两个大小相等的区域,通常称为"From"空间和"To"空间。在垃圾回收过程中,首先将所有存活的对象从"From"空间复制到"To"空间中,然后对整个"From"空间进行垃圾回收,将未复制的垃圾对象清理掉。在下次垃圾回收时,交换"From"空间和"To"空间的角色,继续进行复制和回收操作。这样,"From"空间和"To"空间的角色不断交替,实现了垃圾对象的回收和内存空间的复用。

优点:不会产生碎片
缺点:需要占用双倍内存

分代回收

新生代空间不足,触发MinorGC,先标记

在这里插入图片描述
eden(伊甸园)满了,采用复制算法将存活的对象复制到TO中,幸存的对象寿命+1
在这里插入图片描述

交换From和To
在这里插入图片描述

第二次垃圾回收

在这里插入图片描述

当对象寿命超过阈值(15),晋升到老年代

在这里插入图片描述

FullGC

老年代空间不足,先尝试进行一次MinorGC ,之后空间任然不足,触发FullGC

在这里插入图片描述

在这里插入图片描述
Stop the world 暂停其他线程,进行垃圾回收

4.垃圾回收器

4.1 串行垃圾回收器

  • 单线程
  • 堆内存较小 适合个人电脑

在这里插入图片描述
新生代:复制算法
老年代: 标记 + 整理 算法

4.2 吞吐量优先

  • 多线程
  • 堆内存较大,多核CPU
  • 单位时间内,STW时间最短 0.2 0.2 = 0.4 只执行了两次

在这里插入图片描述
多个垃圾回收线程并行执行,不允许用户工作线程运行

4.3响应时间优先

  • 多线程
  • 堆内存较大,多核CPU
  • 尽可能让单次STW时间短 0.1 0.1 0.1 0.1 0.1 = 0.5

与用户线程并发执行,在工作的同时用户线程也能工作。工作代老年代

在这里插入图片描述

5. G1 垃圾回收器

在这里插入图片描述

5. 整体过程,分为三个部分

在这里插入图片描述

5.1 Young Collection

新生代内存紧张,放入幸存区

在这里插入图片描述

幸存区S有一部分晋升到老年区O

在这里插入图片描述

5.2 Young Collection + CM (并发标记)

初始标记: 标记根对象
并发标记: 从根对象触发,顺引用链找到其他标记对象(老年代占用比例达到一定阈值,进行并发标记)

在这里插入图片描述

5.3Mixed Collection混合收集

混合收集阶段优先回收垃圾最多的区,不是收集所有老年代的垃圾 。目的暂停时间短

在这里插入图片描述

5.4 FullGC

不懂

在这里插入图片描述

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

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

相关文章

如何矢将量数据转换为栅格数据

在我们分析GIS数据时,有时候也可能需要将矢量数据转换为栅格数据来使用,例如:使用AI图像识别技术进行GIS数据分析或导航的时候!矢量数据就可能不满足需求了! GIS数据转换器-矢量V5.0具有矢量数据转换为栅格数据的功能…

vue:实现丝滑上传进度条

一、效果展示 缓若江海凝清光 . 二、代码 const uploadProgress ref(); //上传进度//进度丝滑更新 //进度,时常 const ProgressChange (targetPercent: number, duration: number) > {//performance.now() 是浏览器提供的一个高性能时间 API,它返…

openfiler安装部署-1

openfiler安装部署 简介1 下载openfiler2 openfiler 安装2.1 vmware 典型配置2.2 稍后安装操作系统2.3 新建虚拟机向导2.4 命名虚拟机2.5 指定磁盘容量2.6 添加系统镜像,准备安装系统2.7 启动安装系统2.8 初始化磁盘,选择"Yes"2.9 创建分区&am…

【NVM】nvm常用命令,切换node版本命令

nvm常用的命令,切换node版本命令 nvm 查看支持安装的node版本 nvm list available nvm安装指定版本node nvm install 版本号 例如:nvm install 10.24.1 nvm查看本机安装所有node版本 nvm list nvm切换node版本 nvm use 10.24.1 检测当前node版本 node -…

Stable Diffusion Webui--安装与使用

最近进行的课程汇报,学习了2023年的CVPR文章《DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation》,因此尝试使用了几种方法对这篇文章的工作进行了一定的复现。本文主要介绍Stable Diffusion Web UI(webui)的安装…

CRMEB多店版v3.0前端技术革新与实践

摘要 随着移动互联网技术的飞速发展,用户对移动应用的体验要求日益提高。CRMEB多店版v3.0作为一款针对多门店管理的电商系统,在前端技术层面进行了全面的革新与优化。本文将从移动端UI设计、页面功能更新、DIY设计功能升级、移动端平台与门店管理、营销…

软件行业人均工资多少?20万已完胜大多数

本篇文章继续讨论中国软件行业的人效比。(金融科技公司的人效比链接在这里。) 这次选择了7家公司:软通动力、用友网络、中科软、东软集团、航天信息、东华软件、中国软件,均是中国软件行业排名比较靠前、业务相对纯粹的软件公司。…

机器学习笔记——逻辑斯蒂回归

参数化模型与非参数化 像前面的KNN模型,不需要对f的形式做出假设,在学习中可以得到任意的模型叫非参数化 而需要对参数进行学习的模型叫参数化模型,参数化限制了f的可能的集合,学习难度相对较低 逻辑斯蒂回归 逻辑斯蒂函数 似…

FPGA-ARM架构与分类

ARM架构,曾称进阶精简指令集机器(Advanced RISC Machine)更早称作Acorn RISC Machine,是一个32位精简指令集(RISC)处理器架构。 主要是根据FPGA zynq-7000的芯片编写的知识思维导图总结,废话不多说自取吧 …

等保测评 | 等保测评简介及流程具体是什么?

等保测评是指对信息系统进行安全性评估和测试,以确保其符合国家相关等级保护要求。在当前信息时代,各类机构和企业面临着日益严峻的网络安全风险,等保测评成为了保障信息系统安全的重要手段之一。本文将介绍等保测评的基本概念、流程和重要性…

通过 SFP 接口实现千兆光纤以太网通信2

Tri Mode Ethernet MAC IP 核结构 时钟网络 IP 核内部时钟网络结构如下图所示。其中,tx_mac_aclk 为 AXI-Stream 发送接口的同步时钟, rx_mac_aclk 为 AXI-Stream 接收接口的同步时钟。由于在设计中没有使用 MDIO 接口,所以不存在时钟信号 …

Linux【安全 02】OpenSSH漏洞修复(离线升级最新版本流程)网盘分享3个安装包+26个离线依赖

OpenSSH离线升级最新版本流程 1. 漏洞信息2. 环境说明3.依赖安装3.1 在线安装3.2 离线安装 4.备份卸载4.1 备份4.2 卸载旧版本 5.安装5.1 zlib5.2 ssl5.3 openssh5.3.1 安装5.3.2 配置 6.脚本整理7.文件资源 本文仅针对CentOS7.8版本,其他版本未测试,安装…

Java18新版本特性!

Java 18引入了多项新特性,主要包括默认UTF-8字符集、简单的Web服务器、栈步进API等。Java 18是Oracle在2022年发布的版本,其旨在通过一系列创新特性来提升开发效率与性能。下面将逐一探讨Java 18的主要新特性以及它们对开发者的具体影响: 默认…

“迎七一、学党史、祭英烈”活动在孙善师孙善帅烈士故居启动

临沂信息联播讯(张春兄、冯爱云) 5月30日,山东省著名烈士孙善师孙善帅故居迎来了山东全味时间企业管理咨询服务有限公司、志林丽虹沂蒙文化传播(临沂)有限公司、山东志林搏击健身有限公司的参观团队,标志着…

MathType数学公式编辑器7.6免费官方最新绿色版本下载

MathType作为一款强大的数学公式编辑器,广泛应用于教育界和科研领域。然而,尽管其功能强大,一些用户可能对其高级功能和使用技巧不够了解,无法充分发挥其潜力。本文旨在教育读者如何更高效地使用MathType来编写和编辑数学文档&…

代码随想录——二叉搜索树的最小绝对差(Leetcode530)

题目链接 层序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) …

Vue 框选区域放大(纯JavaScript实现)

需求:长按鼠标左键框选区域,松开后放大该区域,继续框选继续放大,反向框选恢复原始状态 实现思路:根据鼠标的落点,放大要显示的内容(内层盒子),然后利用水平偏移和垂直偏…

25. 悲观锁 和 乐观锁

文章目录 悲观锁 和 乐观锁1.基于CAS实现乐观锁2.自旋锁2.1.不可重入自旋锁2.2.可重入自旋锁2.3.CLH自旋锁 悲观锁 和 乐观锁 Java中的synchronized就是悲观锁的一个实现,悲观锁可以确保无论哪个线程持有锁,都能独占式的访问临界区代码,虽然悲…

Linux基本命令的使用(ls cd touch)

一、Windows系统常见的文件类型 • 文本文件格式:txt、doc、pdf、html等。 • 图像文件格式:jpg、png、bmp、gif等。 • 音频文件格式:mp3、wav、wma等。 • 视频文件格式:mp4、avi、wmv、mov等。 • 压缩文件格式:zip…

连通块中点的数量-java

本次我们通过连通块中点的数量来加深我们对并查集的基本操作和原理,并且知道如何在并查集中添加附属信息。 目录 前言☀ 一、连通块中点的数量☀ 二、算法思路☀ 1.无向图🌙 2.在a b之间连一条边,a b可能相等🌙 3.询问a和b是否在一…