当前位置: 首页 > news >正文

Java的堆如何分代的?

前言:

java对象一般都是朝生夕死,也有部分对象是一直存在的。两种对象如何都放在一起,进行垃圾回收的时候效率较低。所以通过将不同时期的对象放在不同的内存池中,节省垃圾回收的时间,提高性能。

组成:

新生代和老年代,新生代存放新创建的对象,老年代存放长期存在的对象。

新生代的组成:

1、年轻区(Eden)

2、Survivor区(From Survivor 、 To Survivor)

两者之间的空间大小默认的比例是8:2,可通过-XX:SurvivorRatio调整

两者之间的关系:

1、很多对象都是创建在Eden区,Eden区内存用完的时候,会触发GC,非活对象会被标记死亡,活着的对象移动到Survivor区

2、Survivor内存也使用完的话,对象会被移动到老年代

老年代:

老年代的对象存活很久,GC回收会很慢

对象的分代晋升:

正常情况下,对象在新生代进行分配,当Eden区内存耗尽,无法分配新的对象时候,会触发YoungGC进行垃圾回收,没有被回收的对象搬运到Survivor区,这个过程叫做晋升。 

对象也会晋升到老年代,触发的条件主要是:年龄和对象的大小 

1、躲过15次GC,每次垃圾回收的时候,没有被回收掉的对象年龄就会+1,累计到15次(jdk1.8默认),就会进入到老年代。

2、动态的年龄判断:

     如果Survivor空间中小于等于某个年龄的所有对象的大小总和大于Survivor空间的一半时,就把大于等于这个年龄的对象都晋升到老年代

3、大对象直接进入到老年代;-XX:PretenureSizeThreshold 设置大对象的临界值 默认为0

永久代:

1.8之后,被重构为元空间(MetaSpace)

相关文章:

  • 吴恩达机器学习笔记十六 如何debug一个学习算法 模型评估 模型选择和训练 交叉验证测试集
  • SpringCloudGateway理论与实践
  • 【docker基础学习之】镜像构建
  • VLAN FAQ
  • WiFi模块助力少儿编程:创新学习与实践体验
  • 【kvm企业级虚拟化】之初级篇
  • uniapp直接连接wifi(含有ios和安卓的注意事项)
  • MySQL通过SQL语句进行递归查询
  • python 蓝桥杯之并查集
  • 自动驾驶功能场景 逻辑场景 具体场景解释
  • 【Linux系统】线程
  • 复盘-word
  • 公众号IP白名单已添加服务器IP 122.88... 依然给出 40164 错误
  • 探索Java多线程开发
  • CSS3基础2
  • 【Amaple教程】5. 插件
  • es6要点
  • golang中接口赋值与方法集
  • gulp 教程
  • JavaScript-Array类型
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Linux快速复制或删除大量小文件
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • node和express搭建代理服务器(源码)
  • oschina
  • python docx文档转html页面
  • Redis 懒删除(lazy free)简史
  • Spring Boot MyBatis配置多种数据库
  • 给新手的新浪微博 SDK 集成教程【一】
  • 将 Measurements 和 Units 应用到物理学
  • 聊聊hikari连接池的leakDetectionThreshold
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 微信小程序填坑清单
  • 我的zsh配置, 2019最新方案
  • 用简单代码看卷积组块发展
  • 【干货分享】dos命令大全
  • gunicorn工作原理
  • ​第20课 在Android Native开发中加入新的C++类
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #QT项目实战(天气预报)
  • (2)MFC+openGL单文档框架glFrame
  • (第61天)多租户架构(CDB/PDB)
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • .NET CORE Aws S3 使用
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .py文件应该怎样打开?
  • @AliasFor注解
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @ResponseBody
  • @RunWith注解作用
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [1127]图形打印 sdutOJ