java的gc为什么要分代

GC是对JVM中的内存进行标记和回收,Sun公司的JDK用的虚拟机都是HotSpot,对象化的实例是放在heap堆内存中的,这里讲的分代收集也是指对堆内存的回收。GC的分代收集分为:1、年轻代的GC、老年代的GC、永久代的GC。年轻代分为三个区:Eden和两个存活区。

Java GC(garbage collec,垃圾收集,回收),GC是对JVM中的内存进行标记和回收,Sun公司的JDK用的虚拟机都是HotSpot,对象化的实例是放在heap堆内存中的,这里讲的分代收集也是指对堆内存的回收。

GC的分代收集分为:年轻代、老年代、永久代。(方法区是被当做永久代的,不过JDK1.6后将被取消掉了)

1、年轻代的GC

年轻代分为三个区:Eden和两个存活区(Survivor0和Survivor1),分别占内存的80%、10%、10%

使用“停止-复制(S较好-and-copy)”清理法(将Eden区和一个Survivor中仍然存活的对象拷贝到另一个Survivor中)。

当Eden区满时,就执行一次MinorGC,并将剩余存活的对象都添加到Surivivor0,回收Eden中的没有存活的对象。

当Surivivor0页都满了的时候,就将仍然存活的存到Surivivor1中,回收Surivivor0中的对象。

Surivivor0和Surivivor1依次去存,当两个存活区切换了几次后(HotSpot默认是15次),将仍然存活的对象复制到老年代。

2、老年代的GC

老年代GC用的是标记-整理算法,即标记存活的对象,向一端移动,保证内存的完整性,然后将未标记的清掉。

当老年代不够用时,也会执行Major GC,即Full GC。

注意:如果永久代代存放的常量和类过大,无法全部放入永久代,也会触发永久代的GC,将一部分放入老年代。

3、永久代的GC

说明:在JDK1.6版本之后,永久代就要被取消掉了,只留下年轻代和老年代。

说明:年轻代的GC是必须的,但是老年代和永久代并不是必须的,可以通过设置参数来决定是否对类进行回收。

下面是画的一个大概的图片:

java的gc为什么要分代

作者:值得一看的喵
链接:https://www.jianshu.com/p/1d7f424cf91e
来源:简书

延伸阅读

GC是什么

GC是垃圾收集的意思(Garbage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

所以,Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。

对于Java程序员来说,分配对象使用new关键字;释放对象时,只要将对象所有引用赋值为null,让程序不能够再访问到这个对象,我们称该对象为”不可达的”.GC将负责回收所有”不可达”对象的内存空间。

对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是”可达的”,哪些对象是”不可达的”.当GC确定一些对象为”不可达”时,GC就有责任回收这些内存空间。但是,为了保证GC能够在不同平台实现的问题,Java规范对GC的很多行为都没有进行严格的规定。例如,对于采用什么类型的回收算法、什么时候进行回收等重要问题都没有明确的规定。因此,不同的JVM的实现者往往有不同的实现算法。这也给Java程序员的开发带来行多不确定性。

文章标题:java的gc为什么要分代,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37406

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月8日 上午11:37
下一篇 2023年2月8日 上午11:59

相关推荐

  • 项目管理基本工具有哪些

    项目管理基本工具有:一、PingCode;二、Worktile;三、Asana;四、Trello;五、Wrike。PingCode是国内软件研发项目管理软件。功能以及解决的问题有:能够支持看板、敏捷等多种项目的管理;管理团队目标,监控单/多项目的进度、管理计划分配资源。 一、PingCode Pin…

    2023年4月30日
    95700
  • 项目目标与KPI的制定与跟踪

    在确立项目目标并与关键绩效指标(KPIs)联系的过程中,1、明确具体目标与2、选择合适的KPIs为成功的基石。项目目标要依据SMART原则制定,即具体(Specific)、可衡量(Measurable)、可达成(Achievable)、相关性(Relevant)、时限性(Time-bound)。选择…

    2023年11月30日
    48700
  • 敏捷开发是什么

    敏捷开发是一种以人为核心、迭代、循序渐进的软件开发方法,它强调团队合作、客户需求和适应变化。该方法在20世纪末期由一群敏捷宣言签署者推广和实践,如今敏捷开发已成为了现代软件开发的主流方式。敏捷开发的基本原则包括以人为本、可持续的开发、适应变化、快速反馈和简洁性。通过敏捷开发,团队可以更快地响应市场需求,提高软件质量和生产效率,从而获得更大的商业价值。

    2023年10月20日
    33800
  • 抖音封号是什么状态

    抖音封号是指用户的抖音账户被平台限制某些功能或完全封禁的状态,主要包括:1、功能限制状态;2、完全封禁状态;3、封号的影响。这通常是因为用户违反了抖音的社区规定或法律法规,包括但不限于发布违规内容、骚扰其他用户或作弊等行为。被封号可能导致用户无法正常使用抖音,甚至可能导致账户被永久封禁。 1、功能限…

    2023年8月7日
    4.4K00
  • 管理上的缺陷主要有哪几类

    管理上的缺陷主要有:1、决策错误;2、领导方式问题;3、缺乏有效沟通;4、资源分配不合理;5、人力资源管理不当;6、未对风险进行有效管理。其中,决策错误主要是因为对情况的判断不准确,或是未能全面考虑各种因素,导致决策的效果不理想。 1、决策错误 成功的管理:在做出决策时,会全面分析和考虑各种可能的影…

    2023年7月18日
    2.7K00
  • 云原生技术栈的组成元素有哪些

    云原生技术栈环绕着几大关键点:1、容器化,2、服务网格,3、微服务,4、不可变基础设施,5、声明式APIs。容器化作为一种轻量级、高效的代码打包手段,通过隔离进程和环境,使应用在不同计算环境中具备一致性。在众多元素中,容器化对于云原生生态系统尤为关键,它不仅解决了软件运输问题,更是实现快速部署、扩展…

    2023年12月28日
    29300
  • 产品管理如何与市场营销协同工作

    在当今商业环境下,产品管理与市场营销的协同工作是企业获得成功的关键。本文通过分析1、双方角色的相互补充;2、共享市场情报;3、协调一致的品牌信息传递;4、配合执行战略上市计划;5、共同策划和参与市场反馈机制等核心观点,探讨了这种协同如何实现并对企业成长带来的益处。产品管理的专注在于产品的规划与交付,…

    2023年11月15日
    35600
  • mac下载vscode为什么下载不了

    当您在Mac上遇到Visual Studio Code (VSCode) 无法下载的问题时,可能原因包括网络问题、官网维护、系统兼容性问题、安全软件干预等。其中,网络问题是最常见的原因之一,特别是在一些地区,由于网络环境的限制或者干扰,访问VSCode的官方网站可能会受到阻碍。 网络问题不仅仅限于完…

    2024年4月3日
    8200
  • 系统集成项目管理有哪些

    在针对系统集成项目管理的探讨中,可归纳出主要包含了1、项目启动及规划、2、范围管理、3、时间管理、4、成本管理、5、质量管理、6、人力资源管理、7、沟通管理、8、风险管理、9、采购管理以及10、利益相关者管理。这些方面构成了系统集成项目管理的框架,都是至关重要的环节。 以时间管理为例,其在系统集成项…

    2024年1月8日
    42800
  • oa办公系统串发和并发的区别

    主要区别有:一、工作方式;二、工作效率;三、工作质量;四、应用场景。串发模式下,一个工作只能由一个人完成,完成后才能继续下一个工作;而并发模式下,多个人可以同时对同一份工作进行处理。 一、工作方式 串发模式下,一个工作只能由一个人完成,完成后才能继续下一个工作;而并发模式下,多个人可以同时对同一份工…

    2023年5月28日
    2.0K00

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部