虚拟机中的共划分为三个代:年轻代(Young Generation)、年老点(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。

年轻代:

所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代分三个区。一个Eden区,两个Survivor区(一般而言)。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor去过来的对象。而且,Survivor区总有一个是空的。同时,根据程序需要,Survivor区是可以配置为多个的(多于两个),这样可以增加对象在年轻代中的存在时间,减少被放到年老代的可能。

年老代:

在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。

持久代:

用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些Class,例如Hibernate等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=进行设置。

什么情况下触发垃圾回收:

由于对象进行了分代处理,因此垃圾回收区域、时间也不一样。GC有两种类型:Scavenge GC和Full GC。

Scavenge GC

一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC,对Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。这种方式的GC是对年轻代的Eden区进行,不会影响到年老代。因为大部分对象都是从Eden区开始的,同时Eden区不会分配的很大,所以Eden区的GC会频繁进行。因而,一般在这里需要使用速度快、效率高的算法,使Eden去能尽快空闲出来。

Full GC

对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个对进行回收,所以比Scavenge GC要慢,因此应该尽可能减少Full GC的次数。在对JVM调优的过程中,很大一部分工作就是对于FullGC的调节。有如下原因可能导致Full GC:

年老代(Tenured)被写满

持久代(Perm)被写满

System.gc()被显示调用

上一次GC之后Heap的各域分配策略动态变化

参考:

java年轻代_Java分代垃圾回收机制:年轻代/年老代/持久代(转)相关推荐

  1. java清空字符串_java面向对象,垃圾回收机制

    一.类的属性 属性用于定义该类或该类对象包含的数据或者说静态特征.属性作用范围是整个类体. 在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化. 二.UML图 三.类和对 ...

  2. JVM内存区域(Java内存区域)、JVM垃圾回收机制(GC)初探

    一.JVM内存区域(Java内存区域) 首先区分一下JVM内存区域(Java内存区域)和Java内存模型(JMM)的概念.Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Ja ...

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

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

  4. java垃圾回收菜鸟_java垃圾回收机制

    1:对象可能不被垃圾回收 2:垃圾回收并不等于"析构" 3:垃圾回收只与内存有关,为了回收程序不再使用的内存 java虚拟机采用了"自适应"的垃圾回收机制,即& ...

  5. jvm对象从新生代到老年代_JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代...

    内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...

  6. 深入浅出Java垃圾回收机制

    2019独角兽企业重金招聘Python工程师标准>>> 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何 ...

  7. Java虚拟机(十四)——垃圾回收算法

    文章目录 垃圾回收相关算法 标记阶段 引用计数算法 可达性分析算法(根搜索算法.追踪性垃圾收集) 基本思路: GC Roots 有哪几类? 注意 对象的finalization机制 清除阶段 标记-清 ...

  8. JVM原理(Java代码编译和执行的整个过程+JVM内存管理及垃圾回收机制)

    转载注明出处: http://blog.csdn.net/cutesource/article/details/5904501 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.e ...

  9. 详细介绍Java垃圾回收机制

    垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机 ...

  10. 成为JavaGC专家(1)—深入浅出Java垃圾回收机制

    2019独角兽企业重金招聘Python工程师标准>>> 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何 ...

最新文章

  1. hdu 5438 Ponds 拓扑排序
  2. SWFTools PDF转换为SWF
  3. 《敏捷制造——敏捷集成基础结构设计》——1.2相关问题的国内外研究现状
  4. python 连 mongodb
  5. Ozon Tech Challenge 2020 (Div.1 + Div.2) F. Kuroni and the Punishment 随机化
  6. debconf-set-selections mysql_docker 静默安装mysql
  7. 【ssh登陆问题】no matching cipher found / no matching key exchange method found
  8. 如何查看单元测试的结果 以及异常处理
  9. FISCO BCOS 控制台 call调用已经部署的合约 不存在does not exist
  10. Jmeter下载安装详细步骤(2021)
  11. 易辅客栈 从零学辅助_如何从零启动辅助项目
  12. 创新设计思维自学报告
  13. 一级建造师能挂靠到三级资质的企业吗?
  14. 如何阻止iCloud照片库使用手机数据
  15. 中文正版Unity下载
  16. C语言练习1-判断四根木棍是否可以摆成三角形
  17. 万能通用的各大网站(全民简历、简历本等) 简历模板 -- 免费下载方法
  18. 医院虚拟化系统安全防护解决方案
  19. 5W1H聊开源之Who和How——谁、如何参与开源?
  20. Bt5 R3 播放mp3

热门文章

  1. 速码工具箱,Excel批量生成二维码,瞬间搞定!
  2. 什么是MISRA?如何满足该行业标准?
  3. subclipse使用详解
  4. python glob.glob使用
  5. 写一篇基于SPEA2算法的高维多目标救灾物资分配的论文
  6. 处理 Code:516. Authentication failed: password is incorrect or there is no user with such name.
  7. 成都传智播客java培训中心
  8. Java程序员编写代码的技巧
  9. 进程间通信的方式——信号、管道、消息队列、共享内存
  10. 排列组合问题,01234 五个数能组成多少个互不相同的三位数,且数字不重复。