详解Java中的堆内存

详解Java中的堆内存

堆是JVM运行数据区中的一块内存空间,它是线程共享的一块区域(注意了!!!),主要用来保存数组和对象实例等(其实对象有时候是不在堆中进行分配的,想要了解的可以看我之前写的博文:小白秒懂什么是栈上分配)。在堆中内存空间不足以进行分配时,就会出现OutOfMemoryError(OOM)异常。

在JDK7和JDK8中,堆中的内存结构是不同的:
在这里插入图片描述

那在JDK8中的永久代(方法区)为什么没有了那?
它被移动到了本地内存中,被称为元空间

那又有一个疑问了:为什么要把堆内存中的永久代移动到本地内存中作为元空间?
其实就是为了避免OOM异常。

年轻代又被分为三部分:Eden区和两个Survivor区。两个Survivor区大小是完全相同的,被称为from区to区。Eden区和from区、to区的比例为8 : 1 : 1。

  1. 当有一个对象新创建后,其首先会被分配到Eden区(部分对象不会首先分配到Eden区,后面会说),当Eden区内存不足时,会标记Eden区中存活的对象,进行垃圾回收,并把存活的对象移动到from区。
  2. 当Eden区内存再次不足时,再次GC,把Eden区和from区中存活的对象通过复制算法移动到to区。
  3. 再次不足时,GC,通过复制算法将Eden区和to区中存活的对象移动到from区。
  4. 就这样一直移动,当一个对象移动了15次,就被将其分配到老年代。

这就是分代回收
但有些时候对象的除此创建并不会首先被分配到Eden区,这种对象就是大对象,也就是占用大量连续内存空间的对象,其会被直接分配到老年代。

这里可能大家还会有一个疑问:为什么对象移动了15次,就会将其分配给老年代?移动的次数又是存储在哪里的?

这里就又要说到对象的内存结构了。HotSpot虚拟机中,对象在内存中的存储被分为三个部分。如图:
在这里插入图片描述

对象头又被分为
在这里插入图片描述

在MarkWord中,就存储了对象的信息(下面只列了部分):

  1. age:对象分代年龄,占4位。
  2. hashcode。
  3. biased_lock:偏向锁标识,1位。(好奇什么是偏向锁的朋友,可以搜一下锁升级,也就是synchronized这个锁的知识,我这里不深入聊锁)
  4. 等等…

age就是我们对象的GC年龄,每次移动,都会加1。age占4位,也就是2^4 - 1 = 15。所以这就是分代年龄为什么是15次,因为它能存储的最大数值是15。

JVM也提供了参数去设置分代年龄的大小,但都不能超过15。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/440029.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python-pptx 中 placeholder 和 shape 有什么区别?

在 python-pptx 库中,placeholder 和 shape 是两个核心概念。虽然它们看起来相似,但在功能和作用上存在显著的区别。为了更好地理解这两个概念,我们可以通过它们的定义、使用场景以及实际代码示例来剖析其差异。 Python-pptx 的官网链接&…

【微服务】服务注册与发现 - Eureka(day3)

CAP理论 P是分区容错性。简单来说,分区容错性表示分布式服务中一个节点挂掉了,并不影响其他节点对外提供服务。也就是一台服务器出错了,仍然可以对外进行响应,不会因为某一台服务器出错而导致所有的请求都无法响应。综上所述&…

【MySQL 06】表的增删查改

目录 1.insert 增添数据 1.1单行数据 全列插入 1.2多行数据 指定列插入 1.3插入否则更新 1.4.插入否则替换 2.select查找 2.1 全列查找 2.2指定列查找 2.3查询字段为表达式 2.4为查询结果指定别名 2.5 结果去重 2.6 where条件查询 2.7结果排序 2.8.筛选分页结果…

指针(7)

目录 1. sizeof和strlen的对⽐ 1.1 sizeof 1.2 strlen sizeof 和 strlen 总结: 2. 数组和指针 2.1 ⼀维数组 2.2 字符数组 1. sizeof和strlen的对⽐ 1.1 sizeof 计算的是使⽤类型创建的变量所占内存空间的⼤⼩。sizeof不在乎你里面放的什么。sizieof是操作符…

指 针

回顾一下: 1. 指针 1.1 基本知识 指针变量——指针(存放地址的变量) 指针变量所占用的大小,与数据类型无关,跟编译器有关。(32位:4字节,64位:8字节) 1.2 …

使用阿里云试用资源快速部署web应用-dofaker为例

本文介绍使用阿里云的试用资源部署dofaker的方法,本教程主要作学习在阿里云部署web应用之用,部署好应用之后,可以在任何地点通过公网ip访问web应用。 一、创建云主机 登录阿里云账户之后,点击控制台: 点击云服务器EC…

JavaWeb程序设计(第四版)习题参考答案

JavaWeb程序设计(第四版)习题参考答案 目录 模块1 习题参考答案 模块2 习题参考答案 模块3 习题参考答案 模块4 习题参考答案 模块5 习题参考答案 模块6 习题参考答案 模块7 习题参考答案 模块8 习题参考答案 模块1 习题参考答案 选择题 1 .A …

模拟退火算法简介

什么是模拟退火算法? 模拟退火算法(Simulated Annealing,SA)是一种基于随机化搜索的优化算法,灵感来源于金属退火过程。在金属制造中,金属被加热到高温并缓慢冷却,这一过程可以减少内部缺陷&am…

L111213 【哈工大_操作系统】内核级线程内核级线程实现操作系统之“树”

L2.4 内核级线程 切换进程,实际上是切换内核级线程,没有用户级进程说法,进程只能在内核中。 多核与多处理器的区别在于是否共用资源。多核多线程 并发:同时触发,交替执行,在一个核上 并行:同…

三菱FX3U定位控制接线示例(脉冲控制伺服)

一、FX3u系列基本单元(DC24V输入) 二、FX3u系列基本单元(晶体管输出) 脉冲输出用端子Y000、 Y001、 Y002为高速响应输出。 三、FX3UPLC链接MR-J4-A伺服连接实例 1、为了安全起见,不仅仅在可编程控制器侧,在伺服放大器侧也请设计正转限位和反转限位的限位…

数字安全新时代:聚焦关键信息基础设施安全保障——The Open Group 2024生态系统架构·可持续发展年度大会盛大来袭

在全球数字化转型的浪潮中,关键信息基础设施(Critical Information Infrastructure,简称CII)的安全保障已成为各国政府和企业共同关注的焦点。随着技术的飞速发展和网络威胁的日益复杂,如何构建高效、灵活且安全的数字…

vue2接入高德地图实现折线绘制、起始点标记和轨迹打点的完整功能(提供Gitee源码)

目录 一、申请密钥 二、安装element-ui 三、安装高德地图依赖 四、完整代码 五、运行截图 六、官方文档 七、Gitee源码 一、申请密钥 登录高德开放平台,点击我的应用,先添加新应用,然后再添加Key。 ​ 如图所示填写对应的信息&…

【最新华为OD机试E卷-支持在线评测】简单的自动曝光(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

[Linux]开发环境搭建

RPM和YUM 安装JDK 安装Tomcat 安装IDEA 安装MySql

Kotlin真·全平台——Kotlin Compose Multiplatform Mobile(kotlin跨平台方案、KMP、KMM)

前言 随着kotlin代码跨平台方案的推出,kotlin跨平台一度引起不少波澜。但波澜终归没有掀起太大的风浪,作为一个敏捷型开发的公司,依然少不了Android和iOS的同步开发,实际成本和效益并没有太多变化。所以对于大多数公司来说依然风平…

精选算法入门——day2

精选算法入门——day2 题目一题干解题思路一解题思路二解题思路三思路三代码 题目二题干解题思路代码 题目三题干解题思路一代码解题思路二代码解题思路三代码 题目四题干解题思路代码 题目一 题干 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。…

PDF转换为TIF,JPG的一个简易工具(含下载链接)

目录 0.前言: 1.工具目录 2.工具功能(效果),如何运行 效果 PDF转换为JPG(带颜色) PDF转换为TIF(LZW形式压缩,可以显示子的深浅) PDF转换为TIF(CCITT形…

uniapp+Android智慧居家养老服务平台 0fjae微信小程序

目录 项目介绍支持以下技术栈:具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是:数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 老年人 登…

IDEA:Properties in parent definition are prohibited

问题背景 如果你在POM.xml中使用了自定义版本,那么IDEA就没办法很动态检测(其实可以做到的,不是吗),就会有一个Properties in parent definition are prohibited 的错误信息(禁止使用父级定义中的属性&…

吊打ChatGPT4o!大学生如何用上原版O1辅助论文写作(附论文教程)

目录 1、用ChatGPT生成论文选题2、用ChatGPT生成论文框架3、用ChatGPT进行文献整理4、用ChatGPT进行论文润色5、用ChatGPT进行问题求解6、用ChatGPT进行思路创新7、用ChatGPT进行论文翻译8、如何直接使用ChatGPT4o、o1、OpenAI Canvas 9、OpenAI Canvas增强了啥?10、…