jvm中新生代,老年代

  • 一、年轻代
  • 二、老年代
  • 三、永久代

Java中的Heap(堆)是JVM所管理的最大的一块内存空间,主要用于存放各种类的实例对象。
由于Java堆是垃圾收集器管理的主要区域,因此也被称为“GC堆”
GC分为两种:Minor GC,Full GC(或者称为Major GC)


在Java中,堆被划分为两个不同的区域:年轻代(Young)、老年代(Tenured)。年轻代又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使JVM能够更好的管理堆内存中的对象,包括内存的分配以及回收。

堆大小=年轻代+老年代
年轻代 = eden space(新生代) + from survivor +to survivor

一、年轻代

1、年轻代用来存放新近创建的对象。大小随堆大小的增大和减小而相应的变化,默认值是保持堆大小的1/15,可以通过-Xmn参数设置年轻代为固定大小,也可以通过-XX:NewRatio来设置年轻代与老年代的大小比例。年轻代的特点是对象更新速度快,在短时间内产生大量的"死亡对象"。

2、年轻代的特点是产生大量的死亡对象,并且要产生连续可用的空间,所以使用复制清除算法并行收集器进行垃圾回收,对年轻代的垃圾回收称作初级回收(minor gc)

3、初级回收将年轻代分为三个区域,一个新生代(eden),两个复活代(survivor),应用程序只能使用一个新生代和复活代。当发生初级垃圾回收的时候,gc挂起程序,然后将新生代和复活代中的存活对象复制到另一个非活动的复活代中,然后一次性清除新生代和复活代。将原来的非活动复活代标记成为活动复活代。将在指定次数回收后仍然存活的对象移动到老年代中。初级回收后,得到一个空的可用的新生代

4、新生代几乎是所有Java对象出生的地方,即Java对象申请的内存以及存放都是在这个地方。Java中的大部分对象不需要长久存活,具有朝生夕灭的性质。
当一个对象被判定为"死亡"的时候,GC就有责任来回收掉这部分对象的内存空间。新生代是GC收集垃圾的频繁区域。当对象在eden区出生后,在经过一次Minor GC后,如果对象还存活并且能够被另外一块Survivor区域所容纳。则使用复制算法将这些仍然存活的对象复制到另外一块Survivor区域中,然后清理所使用过的Eden和Survivor区域,并且将这些对象的年龄设置为1,以为对象在Survivor区每熬过一次Minor GC,就将对象的年龄加1,
当对象的年龄到达某个值时(默认是15,可以通过参数-XX:MaxTenuringThreshold来设定),这些对象就会成为老年代。
但这也不是一定的,对于一些较大的对象(即需要分配一块较大的连续内存空间)则是直接进入到老年代。

5、JVM每次只会使用Eden和其中的一块Survivor来为对象服务,所以无论什么时候,总有一块Survivor区域是空闲着的。因此,新生代实际可用的内存空间为9/10(即90%)的新生代空间。

二、老年代

1、Full GC 是发生在老年代的垃圾收集动作,采用 标记-清除算法

2、现实的生活中,老年代的人通常会比新生代的人"早死"。堆内存中的老年代不同于这个,老年代的对象几乎个个都是在Survivor区域熬过来的,它们是不会那么容易就"死掉’'的。因此,Full GC发生的次数不会有Minor GC那么频繁,并且进行一次Full GC要比进行一次Minor GC的时间更长。另外,标记-清除算法收集垃圾的时候会产生许多内存碎片(即不连续的内存空间),此后需要为较大的对象分配内存时,若无法找到足够的连续的内存空间,就会提前触发一次GC的收集动作。

三、永久代

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

2、在JAVA8中,永久代被彻底移除。取而代之的是另一块内存区域——元空间。 它可以通过-XX:MetaspaceSize和-XX:MaxMetaspaceSize来进行调整,当达到-XX:MetaspaceSize所指定的阈值后就会开始进行清理该区域。
如果本地空间的内存用尽了会收到java.lang.OutOfMemoryError:Metadata space 的错误信息,和永久代相关的JVM参数-XX:PermSize及-XX:MaxPermSize将会忽略掉。

参考地址:
1、https://gblog.sherlocky.com/java-xin-sheng-dai-lao-nian-dai/
2、https://blog.csdn.net/sted_zxz/article/details/72476673
3、https://blog.csdn.net/a754112602/article/details/81194373

jvm中年轻代,老年代相关推荐

  1. jvm中的年轻代 老年代 持久代 gc ----------转载

    jvm中的年轻代 老年代 持久代 gc 虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Generation)和持久代(Permanent Generation) ...

  2. java 年轻代算法_java内存模型 年轻代/年老代 持久区,jvm中的年轻代 老年代 持久代 gc...

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

  3. jvm中的年轻代 老年代 持久代 gc

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

  4. JVM笔记-13运行时数据区-堆(OOM、年轻代老年代)

    学习JVM的一点简单笔记,宋红康老师jvm讲的很好,感谢. 尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) OOM 异常是什么? 堆空间溢出,存放数据大于堆空间大小. packa ...

  5. GC 年轻代 老年代 持久代

    转载自:http://www.cnblogs.com/yaoyuan23/p/5587548.html 虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Gener ...

  6. java年轻代频繁gc_JVM 年轻代 老年代 持久代 gc

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

  7. JVM中对象进入老年代的3种情况

    1. 对象年龄达到阈值后进入老年代 默认情况下,对象在新生代经历了15次GC后,便会达到进入老年代的条件,将对象转移进入老年代.当然,年龄的阈值可以通过JVM参数进行设置: -XX:MaxTenuri ...

  8. JVM的年轻代、年老代(老年代)和永生代(持久代)【Loadrunner性能调优】

    1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...

  9. jvm之年轻代(新生代)、老年代、永久代以及GC原理详解

    关于JVM,也许你听过这些术语:年轻代(新生代).老年代.永久代.minor gc(young gc).major gc.full gc 不要急,先上图,这是jvm 堆内存结构图 仔细的你发现了 图中 ...

最新文章

  1. 因特网的域名服务器系统的好处,dns域名服务器的作用是什么
  2. 阿里云 物联网产品架构
  3. 搭建Jenkins+Sonarqub+Mysql+Android(上篇)
  4. 《现代操作系统》读书笔记之——进程调度(二)
  5. 使用Hystrix DSL创建弹性骆驼应用程序
  6. Linux Shell快速入门
  7. java alarm api_JAVA抽象类及接口使用方法解析
  8. 高速信号传输约翰逊 pdf_智芯文库 | 高速数字电路的设计与仿真
  9. 【C#】通过正则表达式对TextBox进行校验
  10. 二次元日系游戏制作工具 - live2dSDK入门教程
  11. CSS颜色表示的几种方式
  12. 电影《黑客帝国》的真正含义,人类进化的终结吗?
  13. 自学python需要什么书籍-关于 Python 的经典入门书籍有哪些?
  14. OCX控件在win10下的查看、删除、注册、卸载
  15. WebAssembly运行时库(WASM runtime:wasmer 或 wasmtime)\将rust官方demo猜数字编译为WASI目标并使用Wasmer运行
  16. 1.JAVASE 语言简述
  17. DG备库delay设置备库延时apply archivelog 但不延时传送归archivelog
  18. 装纯净版win10系统在windows上装linux系统【完整详细版】
  19. 《程序设计(C)》期末考试A卷
  20. vue2.0有关时间戳 时间的公共方法(YYYY-MM-DD HH:mm:ss,YYYY-MM-DD,HH:mm:ss,转化为 utc 时间,utc转标准时间,相对时间,日/月/年 时:分:秒)

热门文章

  1. 两个处理IP好用的Python库ipaddr和netaddr
  2. java 保存gif图片_java gif图片保存处理逻辑
  3. matlab set cdata,matlab中set语句赋值出现输入的参数的数目不足情况,求解决!
  4. 计算机的最新应用有哪些内容是什么,善用Wink,将电脑操作录屏为flash (更新图片)...
  5. windows xp 自动登录
  6. 前端开发工程师必读书籍有哪些值得推荐?
  7. 个人网站备案的全流程关于阿里云
  8. Ubuntu升级软件和ubuntu升级系统的命令
  9. 【项目】数仓项目(八)
  10. Oracle Data Guard搭建——Physical Standby Database