Java 内存模型

news2025/1/10 17:07:15

JVM 内部使用的 Java 内存模型, 在逻辑上将内存划分为 线程栈(thread stacks)和堆内存 (heap)两个部分。 如下图所示:

 

JVM 中,每个正在运行的线程,都有自己的线程栈。 线程栈包含了当前正在执行的方法链/调用链上的所有方法的状态信息。

原始数据类型和对象引用地址在栈上;对象、对象成员与类定义、静态变量在堆上

堆内存又称为“共享堆”,堆中的所有对象,可以被所有线程访问, 只要他们能拿到对象的引用地址。

  • 如果一个线程可以访问某个对象时,也就可以访问该对象的成员变量。
  • 如果两个线程同时调用某个对象的同一方法,则它们都可以访问到这个对象的成员变量,但每个线程的局部变量副本是独立的。

JVM 将 Heap 内存分为年轻代(Young generation)和老年代(Old generation, 也叫 Tenured)两部分。

年轻代还划分为 3 个内存池,新生代(Eden space)和存活区(Survivor space), 在大部分 GC 算法中有 2 个存活区(S0, S1),在我们可以观察到的任何时刻,S0 和 S1 总有一个是空的, 但一般较小,也不浪费多少空间。

具体实现对新生代还有优化,那就是 TLAB(Thread Local Allocation Buffer), 给每个线程先划定一小片空间,你创建的对象先在这里分配,满了再换。这能极大降低并发资源锁定的开销。

Non-Heap 本质上还是 Heap,只是一般不归 GC 管理,里面划分为 3 个内存池。

  • Metaspace, 以前叫持久代(永久代, Permanent generation), Java8 换了个名字叫 Metaspace. Java8 将方法区移动到了 Meta 区里面,而方法又是class的一部分和 CCS 交叉了?
  • CCS, Compressed Class Space, 存放 class 信息的,和 Metaspace 有交叉。
  • Code Cache, 存放 JIT 编译器编译后的本地机器代码。
  1. CPU 有一个性能提升的利器: 指令重排序
  2. JMM 规范对应的是 JSR133, 现在由 Java 语言规范和 JVM 规范来维护;
  3. 内存屏障的分类与作用

CPU会在合适的时机,按需要对将要进行的操作重新排序,但是有时候这个重排机会导致我们的代码跟预期不一致。

怎么办呢?JMM 引入了内存屏障机制。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多表查询~

文章目录 多表查询内连接外连接子查询单行单列多行单列多行多列 多表查询 笛卡尔积:有A,B两个集合 取A,B所有的组合情况 内连接 要想查询某一章表的某个字段,可用 表名.字段名表示 也可以给表起别名 隐式内连接INNER可省略 外连接 外连接分左外连接和右外连接 子查…

堆排序创建

堆排序创建 一、介绍1、什么是堆2、大项堆(排序前)3、小项堆(排序前)4、排序思想 二、大项堆排序案例1、流程2、讲解 三、总结 一、介绍 1、什么是堆 堆是一种叫做完全二叉树的数据结构,可以分为大项堆,小…

计算机知识 小tips

目录 什么是R语言? 电脑长期不关机会产生什么影响? nlp是什么? cv是什么? 什么是R语言? R语言是一种用于数据分析和统计建模的编程语言和环境。它由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman于1995年开发而…

【C语言督学训练营 第十三天】栈与循环队列的顺序实现与链式实现

文章目录 前言栈--思想栈--代码实战队列--思想队列--代码实战真题实战! 前言 栈与队列是数据结构中最常见的数据结构之一,因其特性往往可以将问题简单化,在使用栈与队列时要牢记:栈:先进后出,队列&#xf…

逆向练习及相关总结

文章目录 crakeme练习crackme1crackme2crackme3 解题步骤总结关键代码查找方法常见代码C类对象逆向分析C虚函数逆向分析 crakeme练习 crackme1 学到的知识点: main函数查找方法:运行到EntryPoint -> 第一个call(一般在第三行&#xff09…

如何用u盘重装系统win7

​如今的U盘重装win7系统是比较常见的重装win7系统的方法,适用性比较高,操作也十分的简单。有的小伙伴想给自己的电脑重装win7,那么我们用u盘重装系统怎么安装win7?现在小编就来教大家如何用u盘重装系统教程。 工具/原料: 系统…

CTR预估之FMs系列模型:FM/FFM/FwFM/FEFM

前言 ctr预估(点击率,click-through rate, CTR),指一个user在某个特定的场景下会点击一个item的概率估计,这里的item可以是广告、商品等,是推荐和广告系统中十分重要的模块。另外,这里的user-i…

《程序员面试金典(第6版)》面试题 16.18. 模式匹配(暴力破解 + 剪枝)

题目描述 你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。 例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a&q…

Redis基础复习

1 Redis基础概述 Redis 是C语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库、缓存、消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库 1.1 参考网站: 官网 中文文档 1.2 安装 linux安装Redis7 1.3 Re…

全新上线!能源行业大型的S/4升级项目——E.ON(意昂)第五次迁移成功完成

意昂集团是一家德国能源集团的控股公司,总部位于埃森。该公司主要活跃在能源网络、能源服务、可再生能源以及德国核电站的运营和退役领域。 意昂于2019年启动了全公司范围内的S/4联合项目,这是SAP大型S/4项目之一,也是能源行业的大型S/4项目。…

linux下mysql如何修改密码,包括本地密码和远程密码。navicat远程登录

当服务器部署mysql,navicat远程访问,修改密码时需要修改两次 1、修改本地登录密码 mysql > SET PASSWORD PASSWORD(123456); mysql > FLUSH PRIVILEGES;重启mysql服务 service mysql restart上面命令如果报错,则采取以下方法: [ro…

SpringBoot基础篇2(整合第三方技术)

一、SpringBoot整合Junit 直接配置的module,默认就可以测试。 SpringBoot整合第三方技术: 1.pom.xml中引入对应的starter(有勾选的勾选,没有勾选的选项手动导入。在这里查 查依赖的网站) 2.配置相关信息 二、SpringB…

vue diff算法与虚拟dom知识整理(6) 感受diff算法 (不要神话虚拟dom更不要做完美主义)

我们还是打开之前的案例 然后 将src下的index.js代码修改如下 import {init,classModule,propsModule,styleModule,eventListenersModule,h,} from "snabbdom";//创建patch函数const patch init([classModule,propsModule,styleModule,eventListenersModule]);//创…

tcp 三次握手和四次挥手报文分析

1,tcp 三次握手 报文抓取如下: 三段报文分析: 第一次:26->96报文交互 Seq-num 567391014, ACK_NUM 0; flags SYN 第二次:96->26报文交互 Seq-num 416352681, ACK_NUM Seq-num 1 567391014 1 567391015,…

硬件系统工程师宝典(22)-----电容、电感的特性,你都知道吗?

各位同学大家好,欢迎继续做客电子工程学习圈,今天我们继续来讲这本书,硬件系统工程师宝典。上篇我们说到做电阻选型时要考虑阻值、功率、精度和封装大小。上下拉电阻除了给引脚一个稳定的电平,可以提高电压准位、增加输出功率以及…

法律 法规

第八章、法律 法规 从所涉及的法律法规角度 1️⃣著作权法 2️⃣计算机软件保护条例 3️⃣商标法 4️⃣专利法 从试题考点分布的角度 1️⃣保护期限 2️⃣知识产权人确定 3️⃣侵权判断 中国公民、法人或者其他组织的作品,不论是否发表,都享有著作…

Linux服务安装node,npm与yarn

目录 Linux服务安装node,npm与yarn 可以直接在win或者Linux安装node官网(中文版)下载所需要的版本 通过epel 的来安装 node 安装npm 利用npm安装yarn 卸载yarn 安装依赖 运行 本篇文章仅是本人遇到的问题,希望可以对你有帮…

基于海鸥算法优化的核极限学习机(KELM)分类算法-附代码

基于海鸥算法优化的核极限学习机(KELM)分类算法 文章目录 基于海鸥算法优化的核极限学习机(KELM)分类算法1.KELM理论基础2.分类问题3.基于海鸥算法优化的KELM4.测试结果5.Matlab代码 摘要:本文利用海鸥算法对核极限学习机(KELM)进行优化,并用于分类 1.KE…

Go基础知识入门

1、go语言介绍 2、go开发环境搭建 2.1、go的安装 go下载地址:All releases - The Go Programming Language,windows选择下载go1.20.2.windows-amd64.msi文件。 双击go1.20.2.windows-amd64.msi,点击"Next",然后勾选同…

Linux——进程信号1

信号和信号量是俩个东西,俩者无关系。 信号 信号本质是一种通知机制,用户or操作系统通过发送一定的信号,通知进程,某些事件已经发送,让进程进行后续处理。 结合进程,信号结论: 进程要处理信号&a…