分代垃圾回收机制是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的回收算法,以便提高回收效率。Java虚拟机将对象分为三种状态:年轻代、年老代、持久代。JVM将堆内存划分为 Eden、Survivor 和 Tenured/Old 空间。

1. 年轻代

所有新生成的对象首先都是放在Eden区。 年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象,对应的是Minor GC,每次 Minor GC 会清理年轻代的内存,算法采用效率较高的复制算法,频繁的操作,但是会浪费内存空间。当“年轻代”区域存放满对象后,就将对象存放到年老代区域。

2. 年老代

在年轻代中经历了N(默认15)次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。年老代对象越来越多,我们就需要启动Major GC和Full GC(全量回收),来一次大扫除,全面清理年轻代区域和年老代区域,这样会对系统性能造成影响。

3. 持久代

用于存放静态文件,如Java类、方法等。持久代对垃圾回收没有显著影响。

堆内存的划分细节:

·Minor GC:

用于清理年轻代区域。Eden区满了就会触发一次Minor GC。清理无用对象,将有用对象复制到“Survivor1”、“Survivor2”区中(这两个区,大小空间也相同,同一时刻Survivor1和Survivor2只有一个在用,一个为空)

·Major GC:

用于清理老年代区域。

·Full GC:

用于清理年轻代、年老代区域。 成本较高,会对系统性能产生影响。

垃圾回收过程:

1、新创建的对象,绝大多数都会存储在Eden中,

2、当Eden满了(达到一定比例)不能创建新对象,则触发垃圾回收(GC),将无用对象清理掉,

然后剩余对象复制到某个Survivor中,如S1,同时清空Eden区

3、当Eden区再次满了,会将S1中的不能清空的对象存到另外一个Survivor中,如S2,

同时将Eden区中的不能清空的对象,也复制到S1中,保证Eden和S1,均被清空。

4、重复多次(默认15次)Survivor中没有被清理的对象,则会复制到老年代Old(Tenured)区中,

5、当Old区满了,则会触发一个一次完整地垃圾回收(FullGC),之前新生代的垃圾回收称为(minorGC)

java垃圾回收 分代_Java-垃圾回收机制-通用的分代垃圾回收机制相关推荐

  1. java数据库实体层封装_Java通过JDBC封装通用DAO层

    在项目中,我们要不断的和数据库打交道,为了提高数据库操作的执行效率和增加代码的复用性,将重新封装一个Dao层,也就是数据访问层 ,用来访问数据库实现数据的持久化. 虽然现在有不少数据持久化层的框架,但 ...

  2. java垃圾回收 分代_Java分代垃圾回收策略原理详解

    一.为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对 ...

  3. java年轻代_Java分代垃圾回收机制:年轻代/年老代/持久代(转)

    虚拟机中的共划分为三个代:年轻代(Young Generation).年老点(Old Generation)和持久代(Permanent Generation).其中持久代主要存放的是Java类的类信 ...

  4. java垃圾回收 分代_Java 垃圾回收机制 (分代垃圾回收ZGC)

    什么是自动 自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制.所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象:而未使用中的对象(未引用对象), ...

  5. java知识点8——垃圾回收原理和算法、通用的分代垃圾回收机制、 JVM调优和Full GC、开发中容易造成内存泄露的操作

    垃圾回收原理和算法 内存管理 Java的内存管理很大程度指的就是对象的管理,其中包括对象空间的分配和释放. 对象空间的分配:使用new关键字创建对象即可 对象空间的释放:将对象赋值null即可 垃圾回 ...

  6. java垃圾回收 分代_JVM基础知识(四)- 分代回收机制和垃圾回收算法

    这次我们来讲讲垃圾回收,前边或多或少的都提及过垃圾回收的知识点,我们经常说的GC(Garbage Collection)就是垃圾回收,我们都知道JAVA都是由C++演化而来,那么JAVA和C++很重要 ...

  7. java gc会回收类么_Java GC 垃圾回收机制

    一.Java GC是什么? Java垃圾回收是对JVM(Java Virtual Machine)中的内存进行标记,并确定哪些内存需要回收,根据一定的回收策略,自动的回收内存,永不停息(Nerver ...

  8. Java当中jvm运行时区域新生代、老年代、永久代和Garbage Collection垃圾回收机制【杭州多测师】【杭州多测师_王sir】...

    1.本地方法栈和程序计数器 ==>偏底层一般不会接触到 2.方法区 ==>对应为永久代 3.虚拟机栈(stack) ==>对应为栈 4.堆(heap) ==>对应里面有新生代+ ...

  9. java 堆_JAVA学习笔记 07——堆、栈和垃圾回收机制

    程序执行的内存分析过程: 虚拟机栈(简称:栈)的特点如下: 1. 栈描述的是方法执行的内存模型.每个方法被调用都会创建一个栈帧(存储局部变量.操作数.方法出口等). 2. JVM为每个线程创建一个栈, ...

最新文章

  1. Java计算两个字符串日期之间的天数差
  2. 机器学习从Python 2迁移到Python 3,你需要注意的一些事……
  3. 【深度学习笔记】CUDA
  4. hihoCoder太阁最新面经算法竞赛18
  5. 程序自我销毁(VB源代码)
  6. (10)调用门提权(无参数)
  7. netty源码分析之一:server的启动
  8. 【转载文章】记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案...
  9. php7扩展sphinx,php7进行安装sphinx简单记录
  10. 2018年6月3号(线段树(3))
  11. rsync通过服务同步、linux日志、screen工具
  12. 锐捷Ruijie交换机补丁升级及补丁卸载
  13. 微信红包系统设计方案
  14. android 读取图片字节流,Android屏幕截图直接读取screencap流来实现
  15. windows10如何截长图
  16. android 没有指南针,Android指南针指向我的位置,而不是北部
  17. 微信公众号的前端热门文章及链接(不定期更新)
  18. em算法 图像模糊检测_基于EM算法的眼底OCT图像反卷积去模糊技术
  19. 你是要搞敏捷吗?教你挑选试点团队的盖世绝招
  20. poj3616 Miking Time dp

热门文章

  1. java读写excel文件
  2. Mysql原理、主从复制、半同步复制及基于SSL复制
  3. Asp.net MVC Action大全(转)
  4. npm -S -D -g i 有什么区别
  5. ActiveMQ整合spring结合项目开发流程(生产者和消费者)总结
  6. PHP编码规范 代码样式风格规范
  7. 【bzoj2929】[Poi1999]洞穴攀行 网络流最大流
  8. 05_视图控制器_1
  9. selenium+unittest自动化测试(二)---浏览器控制及元素定位的方法
  10. 定义druid工具类