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%

使用“停止-复制(Stop-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

相关推荐

  • 缺陷管理方式有哪些种类

    缺陷管理方式主要有三个种类:1.缺陷预防管理;2.缺陷排除管理;3.缺陷标识方法。其中,缺陷预防管理和缺陷排除管理,是从管理时机角度进行的分类;而缺陷标识方法,主要是针对既有缺陷进行管理的方式。 1.缺陷预防管理 缺陷预防(DefectPrevention)简称DP,是一种用于在软件开发生命周期中识…

    2022年11月13日
    16700
  • 什么是响应式开发

    响应式开发也就是响应式网站设计是一种网络页面设计布局,其理念是,集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局。响应式网页设计是一种解决方案,可以让网站在不同的设备上自适应地展示内容。 响应式开发也就是响应式网站设计是一种网络页面设计布局,其理念是,集中创建页面…

    2023年5月29日
    400
  • 软件版本管理工具有哪些

    软件版本管理工具有:一、SVN;二、Git;三、HG;四、CVS。SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。 一、SVN SVN全称为:Apache Subvers…

    2023年3月31日
    33900
  • 文件资源管理软件有哪些

    文件资源管理软件有:一、Total Commander;二、Dropit;三、TagLyst;四、QTTabBar;五、Directory Opus;六、Adobe Bridge;七、XYplorer。Total Commander这款软件的这些方面极具优势和特色:极其全面的功能、完善的插件系统、双…

    2023年4月27日
    4400
  • 项目进度怎么把控

    把控项目进度需要做到:一、项目分解;二、需求评审;三、利用工具对项目排期;四、项目跟进。项目开始前首先应该将项目分解,并落实到每个人。产品经理需要绘制项目计划,提交的计划中需包含实施进度明细、实施人员组织结构、实施团队组成。 一、项目分解 项目开始前首先应该做的事就是将项目分解,并落实到每个人。以互…

    2023年4月27日
    800
  • oa办公都是需要什么模块

    需要以下模块:一、人事管理模块;二、流程审批模块;三、公文管理模块;四、项目管理模块;五、资产管理模块;六、客户关系管理模块;七、知识管理模块。人事管理模块是OA系统中最基本的模块之一。它包括员工档案管理、考勤管理、薪资管理等内容。 一、人事管理模块 人事管理模块是OA系统中最基本的模块之一。它包括…

    2023年5月28日
    300
  • mybatis和hibernate区别大不大

    mybatis和hibernate区别较大,主要在以下几点有区别:1、本质区别;2、开发难度对比3、sql书写比较;4、数据库扩展性比较;5、缓存机制比较。针对高级查询,Mybatis需要手动编写SQL语句以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果…

    2023年2月12日
    4200
  • 屏幕刷新率60和120的区别

    屏幕刷新率60Hz与120Hz的差异主要在于:1、显示流畅度不同;2、电池消耗不同;3、对眼睛压力的影响不同;4、对硬件要求不同;5、价格差异。从整体对比来看,120Hz的刷新率提供了更加流畅的显示效果,但同时也对电池和硬件有更高的要求。一般而言,60Hz和120Hz并不能简单的说哪个更好,主要还是…

    2023年5月24日
    700
  • 计算机中的指令集和指令系统和程序有什么区别

    计算机中的指令集和指令系统和程序的区别:1、作用不同;2、所含内容不同;3、原理不同。作用不同是指指令集是指挥和控制计算机执行某种操作的命令,指令系统是软件和硬件的主要界面,反映了计算机所拥有的基本功能,程序是为实现预期目的而进行操作的一系列语句和指令。 一、计算机中的指令集和指令系统和程序有什么区…

    2023年3月30日
    11400
  • 安全测试和渗透测试的区别

    安全测试和渗透测试的区别如下:1、渗透测试是证明系统存在问题,而安全测试是发现系统问题。2、渗透测试站在攻击者的角度来看待问题,安全测试则是站在防护者角度。3、渗透测试选取部分点为测试目标,安全测试则是一套完整测试。 安全测试和渗透测试的区别主要在于以下几点: 1、渗透测试是以入侵系统证明系统存在安…

    2022年10月12日
    63600

发表回复

登录后才能评论
联系我们
站长微信
站长微信
分享本页
返回顶部