爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      java虚拟机-垃圾收集器与内存分配策略学习笔记

      首页 知识中心 存储 文章详情页

      java虚拟机-垃圾收集器与内存分配策略学习笔记

      2023-07-06 09:40:09 阅读次数:80

      java,收集器,虚拟机

      垃圾收集器与内存分配策略

      三个问题
      1、哪些内存需要回收
      2、什么时候回收
      3、如何回收

      在线程内部,随着方法结束或者线程结束时,线程内部内存会跟随者回收。
      java堆的内存消耗是由于动态创建对象而产生的,所以具有不确定性。需要
      垃圾处理器关注。

      确定哪些对象已经“死去”

      引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,
      计数器值就加一,当引用失效时,计数器值就减一,任何时刻计数器为0的对
      象就是不可能再被使用的。
      缺点:难以解决对象之间循环引用的问题。

      可达性分析算法:通过GC Roots的对象作为起始点,从这些节点开始向下搜索,
      搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,
      则证明此对象是不可用的。
      GC Roots包括:
      1、虚拟机栈中引用的对象
      2、方法区中类静态属性引用的对象
      3、方法区中常量引用的对象
      4、本地方法栈中JNI引用的对象

      引用的分类
      1、强引用:”Object obj = new Object()”,只要强引用存在,垃圾收集器永远不会回收掉被引用的对象
      2、软引用:描述还有用但非必须的对象,在系统发生内存溢出异常之前,会把这些对象进行二次回收。提供了SoftReference类来实现软引用
      3、弱引用:被弱引用关联的对象只能生存到下一次垃圾收集发生之前。WeakReference
      4、虚引用:为了能在这个对象被收集器回收时收到一个系统通知

      生存还是死亡
      一个对象真正宣告死亡的过程:如果对象在进行可达性分析后发现没有鱼GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,
      筛选的条件是此对象是否有必要执行finalize()方法。当对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,虚拟机将
      这两种情况都视为没有必要执行。如果这个对象被判定为有必要执行finalize()方法,那么这个对象将会放置在一个叫做F-Queue的队列之中,
      并且在稍后由一个由虚拟机自动建立的,低优先级的Finalizer线程去执行它。对象重新与引用链上的任何一个对象建立关联就可以在第二次标
      记时从即将收回的集合中移除。

      回收方法区(永久带)
      永久带的垃圾回收:废弃常量和无用的类
      常量池字面量的回收:”abc”进入常量池,但是没有一个String对象是叫做”abc”的,如果此时发生内存回收而且必要的话,这个”abc”常量会被系统
      清理出常量池。其他类、方法、字段的符号引用与此类似。

      判断无用的类:
      1、该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例。
      2、加载该类的ClassLoader已经被回收
      3、该类对应的java.lang.Class对象没有在任何地方被引用,无法通过任何地方通过反射访问该类的方法

      使用场景:在大量使用反射、动态代理、CGlib等byteCode框架、动态生成JSP以及OSGi这类频繁自定义ClassLoader的场景都需要虚拟机具备类卸载功
      能,以保证永久代永远不会溢出。

      垃圾回收算法

      标记-清除算法
      1、标记处说有需要回收的对象,在标记完成后统一回收所有被标记的对象。
      缺点:效率问题;空间问题,标记清楚之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,
      无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

      复制算法(解决效率问题)
      1、将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。
      2、当着一块的内存用完了,就将还存活着的对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉。
      优点:实现简单,运行高效
      缺点:将内存缩小到了原来的一半

      标记-整理算法(用于老年代)
      在标记-清除算法执行对可回收对象进行清理之前,让所有存活的对象都向一端进行移动,然后直接清理掉端边界以外的内存。

      分代收集算法(商业虚拟机采用的方式)
      根据对象存活周期的不同将内存划分为几块。一般是把Java堆分成新生代和老年代。
      新生代:采用复制算法
      老年代:存活率搞,使用标记-整理算法

      HotSpot的算法实现

      枚举根节点
      使用OopMap

      安全点:只有在到达安全点时才能暂停
      选定标准:是否具有让程序长时间执行的特征,即指令序列复用,例如方法调用、循环跳转、异常跳转等
      如何在GC发生时让所有线程都跑到最近的安全点上再停顿下来:
      1、抢先式中断
      在GC发生时,首先把所有线程全部中断,如果发现有线程中断的地方不在安全点上,就恢复线程,让它跑到安全点上。
      2、主动式中断
      当GC需要中断线程时,设置一个标志,各个线程在执行是主动去轮询这个标志,发现中断标志位真时就自己中断挂起。

      安全区域:在线程处于sleep或者block状态,无法响应JVM的中断请求,走到安全的地方去中断挂起。
      定义:在一段代码片段之中,引用关系不会发生变化。在这个区域任何地方开始GC都是安全的。
      执行过程:当线程执行到安全区域中的代码时,首先标识自己已经进入了安全区域。在这段时间里,JVM要发起GC时,就不用管
      标识自己为安全区域的线程了。在线程要离开安全区域时,要检查系统是否已经完成了根节点枚举,如果完成了,那线程就继续
      执行,否则它就必须等待知道收到可以离开安全区域的信号为止。

      垃圾收集器

      Serial收集器
      单线程的收集器,在它进行收集时,必须暂停其他所有的工作线程,知道他收集结束。
      在Client模式下的默认新生代收集器。
      优点:简单而高效

      ParNew收集器
      Serial收集器的多线程版本
      运行在server模式下的虚拟机中首选的新生代收集器
      优点:除了serial收集器以外,目前只有它能与CMS收集器配合工作。
      缺点:在单cpu的环境下,比serial的效果差(类似于在计算量比较小的情况下,并行计算比串行计算慢一样,有Cpu进行上下文切换的开销)
      默认开启的收集线程数量与CPU的数量相同,在CPU非常多的情况下,使用-XX:ParallelGcThreads来限制垃圾收集器的线程数

      Parallel Scavenge收集器(新生代收集器)
      特点:达到一个可控制的吞吐量,即CPU用于运行用户代码的时间与CPU总消耗时间的比值
      精确控制吞吐量的参数:
      最大垃圾收集停顿时间:-XX:MaxGCPauseMillis 一个大于0的毫秒数,保证内存回收花费的时间不超过设定值,GC停顿时间缩短是以牺牲吞吐量和新生代空间换取的
      吞吐量大小设置:-XX:GCTimeRatio 大于0且小于100的整数,垃圾收集时间占总时间的比率
      别名:吞吐量优先收集器

      Serial Old收集器
      是serial收集器的老年代版本,单线程,使用标记-整理算法。在Client模式下的虚拟机使用。

      Parallel Old收集器
      是parallel Scavenge收集器的老年代版本,使用多线程和标记-整理算法。
      意义:吞吐量优先的收集器终于有了比较名副其实的应用组合,在注重吞吐量以及Cpu资源铭感的场景,优先考虑Parallel Scavenge加parallel Old收集器。

      CMS收集器:获取最短回收停顿时间为目标
      应用场景:互联网站或者B/S系统的服务器上(重视服务的响应速度)
      使用标记-清除算法
      运作过程:
      1、初始标记:标记一下GC Roots能直接关联到的对象
      2、并发标记:进行GC Roots Teacing的过程
      3、重新标记:修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录
      4、并发清除
      优点:并发收集、低停顿(也叫并发低停顿收集器)
      缺点:
      1、CMS收集器对CPU资源非常敏感
      2、CMS收集器无法处理浮动垃圾,可能出现“Concurrent Mode Failure”失败而导致另一次full GC的产生
      3、收集借宿时会有大量空间碎片产生

      G1收集器(Garbage-First)
      面向服务端应用得额垃圾收集器。在未来可以替换掉CMS收集器。
      特点:
      1、并行与并发:充分利用多CPU、多核环境下的硬件优势,使用多个CPU来缩短stop-the-world停顿的时间。
      2、分带收集
      3、空间整合:从整体上看基于标记-整理算法。从局部上看是基于复制算法。不会产生内存空间碎片,收集后能提供规整的可用内存。
      4、可预测的停顿:让使用者明确指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集器上的时间不得超过N毫秒。(实时垃圾收集器)
      实现原理:G!跟踪各个Region里面的垃圾堆积的价值大小(回收所获得的空间大小以及回收所需时间的经验值),在后台维护一个优先列表,
      每次根据运行的手机时间,有限回收价值最大的Region。
      G1收集器的运作步骤:
      1、初始标记:标记一下GC Roots能直接关联到的对象,并且修改TAMS的值,让一下一阶段用户程序并发运行时,能在正确可用的Region中创建新对象
      2、并发标记:从GC Roots开始对堆中对象进行可达性分析,找出存活的对象
      3、最终标记:修正在并发标记期间因用户程序继续运作而导致标记产生变动的那一部分标记记录,虚拟机将这段时间对象变化记录在线程Remembered Set Logs里面
      4、筛选回收:首先对各个Region的回收价值和成本进行排序,根据用户所期望的GC停顿时间来指定回收计划

      理解GC日志
      xx.yy: [GC( or [Full ) [DefNew: 100K->10K(110k) , 0.0001 secs]]
      //前面的xx.yy代表了GC发生的时间,这个谁的含义是从Java虚拟机启动以来经过的秒数
      //[GC 或 [Fu;;说明了这次垃圾收集的停顿类型,
      //[DefNew 代表了GC发生的区域(GC前已使用容量->GC后已使用容量,括号里面的是总容量)

      内存分配和回收策略
      两个问题
      1、给对象分配内存
      2、回收分配给对象的内存

      对象的内存分配
      堆上分配,主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下回直接分配在老年代中。

      内存分配策略
      1、对象优先在Eden分配,当Eden分区没有足够空间进行分配时,虚拟机将发起一次Minor GC
      2、大对象直接进入老年代,大对象是指需要大量连续内存空间的Java对象
      3、长期存活的对象将进入老年代
      4、动态对象年龄判定
      5、空间分配担保

      Minor GC和 Full GC的区别
      1、新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为java对象大都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快
      2、老年代GC(Major GC/Full GC):比新生代GC慢十倍以上

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/u_14196886/5818989,作者:demo123567,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:NIFI综合应用场景-将mysql查询出的json数据转换成txt后存储至HDFS中

      下一篇:mysql的存储引擎之InnoDB

      相关文章

      2025-05-14 10:02:58

      java休眠到指定时间怎么写

      java休眠到指定时间怎么写

      2025-05-14 10:02:58
      java , sleep , Thread , util , 方法
      2025-05-14 10:02:58

      java项目多端数据同步解决方案

      多端数据同步是指在多个设备(例如桌面应用、移动应用、Web应用)之间保持数据的一致性。

      2025-05-14 10:02:58
      java , Spring , WebSocket , 同步 , 数据 , 版本号
      2025-05-13 09:49:12

      Java学习(动态代理的思想详细分析与案例准备)(1)

      Java学习(动态代理的思想详细分析与案例准备)(1)

      2025-05-13 09:49:12
      java , 代理 , 代码 , 对象 , 接口 , 方法 , 需要
      2025-05-09 08:20:32

      基于IDEA的Maven简单工程创建及结构分析

      通过一个 mvn 命令直接让我们创建一个 Maven 的脚手架。

      2025-05-09 08:20:32
      java , Maven , xml , 创建 , 文件 , 文件夹 , 项目
      2025-05-08 09:03:57

      前K个高频元素java

      给定一个非空的整数数组,返回其中出现频率前 前K个高频元素java 高的元素。

      2025-05-08 09:03:57
      java , 元素 , 样例 , 给定
      2025-05-08 09:03:21

      基于java Swing开发的学生成绩管理系统【项目源码+数据库脚本】

      基于java Swing开发的学生成绩管理系统【项目源码+数据库脚本】

      2025-05-08 09:03:21
      java , Swing , 学生 , 源码
      2025-05-08 09:03:21

      java Swing学生成绩管理系统【项目源码+数据库脚本】

      本项目是一套基于java Swing开发的学生成绩管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。

      2025-05-08 09:03:21
      java , 学生 , 成绩 , 数据库 , 源码
      2025-05-07 09:08:08

      java Swing学生选课管理系统【源码+数据库+报告】

      本项目是一套基于java Swing学生选课管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。

      2025-05-07 09:08:08
      java , 学生 , 截图 , 源码
      2025-05-07 09:08:08

      java swing人机对战五子棋(含背景音乐)

      本项目是一套基于java swing的人机对战五子棋系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。

      2025-05-07 09:08:08
      java , 源码
      2025-05-06 09:19:21

      【Linux 从基础到进阶】 Xen 虚拟化技术应用

      Xen 是一款开源的虚拟化技术,广泛应用于云计算和服务器虚拟化中。作为一款高性能的虚拟化平台,Xen 提供了完整的虚拟化(Full Virtualization)和准虚拟化(Paravirtualization)支持,能够在 x86 和 ARM 等架构上运行多个虚拟机。

      2025-05-06 09:19:21
      安装 , 虚拟化 , 虚拟机
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5255903

      查看更多

      最新文章

      大厂笔试选择题总结(持续更新)

      2024-12-16 09:18:45

      服务器数据恢复—raid5阵列多块磁盘离线导致存储崩溃的数据恢复案例

      2024-11-18 09:55:50

      常见的存储虚拟化技术(HCIE云方向)

      2024-11-13 08:40:55

      JVM优化 - 垃圾回收

      2024-10-21 09:43:12

      在java中构建高效的结果缓存

      2024-09-25 10:13:57

      【Android入门到项目实战--4.1】—— 数据持久化技术其一:文件存储

      2024-08-06 09:36:58

      查看更多

      热门文章

      leetcode数据结构-LRU

      2023-03-02 10:21:35

      StringBuffer.append(str)之OutOfMemoryError打破砂锅问到底

      2022-12-28 07:22:30

      JVM内存模型

      2023-05-31 08:43:18

      eclipse内部启动tomcat,报内存太小或内存溢出问题解决

      2023-06-21 06:39:48

      Windows Storage Server 2008做存储服务器应用案例

      2023-07-19 07:52:37

      【存储数据恢复】EqualLogic PS系列存储磁盘故障导致存储不用的数据恢复案例

      2023-08-07 07:01:35

      查看更多

      热门标签

      存储 缓存 内存 数据库 数据 redis mysql 服务器 数据恢复 Redis linux java 链表 MySQL sql
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      大厂笔试选择题总结(持续更新)

      JVM内存模型

      Windows Storage Server 2008做存储服务器应用案例

      rust中Point是结构体类型,【let p1=Point{x:25,y:25};let p2=p1;】请问p1和p2是同一个对象吗?

      【Android入门到项目实战--4.1】—— 数据持久化技术其一:文件存储

      VMware中出现物理内存不足的解决方案

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号