JVM 一张图带你了解内存分配过程 搞懂逃逸分析|标量替换|指针碰撞|空闲列表|TLAB

news2024/10/6 4:19:34

面试题

在栈上分配对象,使用标量替换的目的是什么?

内存分配过程

逃逸分析

如何确定对象是否在栈上进行分配,当然得通过逃逸分析了。
逃逸分析是什么意思呢?我们直接看两段代码
代码1:

public Student get(){
    Student student = new Student();
    student.setName("乐哥聊编程");
    student.setStuNo("乐哥聊编程");
    student.setAge(23);
    return student;
}

代码2:

public void save(){
    Student student = new Student();
    student.setName("乐哥聊编程");
    student.setStuNo("乐哥聊编程");
    student.setAge(23);
    // 保存到数据
}

比对两段代码,如果jvm开启逃逸分析:
那么代码1在经过逃逸分析之后:student不允许对象在栈上分配
那么代码2在经过逃逸分析之后:student允许对象在栈上分配

为什么会这样呢?
因为虚拟机在分析代码1后,发现student对象生成之后,被返回了,使用范围不止在当前方法,所以如果在栈上分配的话,那么当前方法结束后,对象就会被移除,但是此时对象是返回给当前方法的调用者的,导致拿到的是空的,最终导致程序出现问题。

同样道理,在分析代码2之后,student只在当前方法使用,所以允许在栈上分配

标量替换

当通过逃逸分析之后,如果对象在栈上分配,jvm将会通过标量替换拆解对象。
标量替换 = 将对象拆解成不能再分为止
聚合量 =对象中可以再次被分解的属性

public class Student {
    private String name;
    private String stuNo;
    private Teacher teacher;
    private int age;
}

Student对象首先拆解成name,stuNo,age
然后继续拆解Teacher对象,同样拆解方式。

内存划分方式

指针碰撞

将内存对半拆分,中间放一个指针,指针左边是已分配内存空间,右边是空闲内存空间。申请内存地址时,指针向右移动

空闲列表

空闲列表记录了哪段内存地址是空闲的,申请内存空间时,从这个空闲列表中的区域获取内存地址。

如果解决内存分配并发问题?

  • CAS

compareAndSwap(a,oldValue,newValue)

  • TLAB (本地线程分配缓冲区)

每个线程预先在堆中预先分配一小块内存

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

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

相关文章

CEAC之《企业信息管理》2

👨‍💻个人主页:微微的猪食小窝 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 微微的猪食小窝 原创 收录于专栏 【CEAC证书】 1在每个文本框、组合框和列表框的属性表中,都可以找到3个属性,分别…

30.nacos做注册中心入门实例(springcloud)

一、新建nacos-client-a 1.因为官方的springboot没有集成nacos的依赖,所以不再使用springboot的官方下载依赖地址 2. 因为我的idea是2019版本,更改了springboot下载路径后,不会自动更新,第一次选中依赖时,仍然时sprin…

回溯算法(回溯搜索法)

回溯是递归的副产品,只要有递归就会有回溯。 回溯算法,不是一个高效的算法,纯暴力算法,实际上是递归算法的一部分,最多再剪枝⼀下。 回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案&a…

Mac无法打开CORE Keygen

背景 显示如下图,无法打开CORE Keygen,不要方。一个神器即可解决。 方案-使用UPX: (1)先安装upx (什么,你说你没有brew???看看这篇文章 Mac安装brew_Hero.Lin的博…

一篇文章彻底理解 HDFS 的安全模式

一篇文章彻底理解 HDFS 的安全模式 1 什么是 HDFS 的安全模式 Hdfs 的安全模式,即 HDFS safe mode, 是 HDFS 文件系统的一种特殊状态,在该状态下,hdfs 文件系统只接受读数据请求,而不接受删除、修改等变更请求,当然也…

【攻破css系列——第九天】常规流

文章目录1. 常规流2. 常规流布局2.1 定义2.2 包含块2.3 块盒2.3.1 每个块盒的总宽度,必须等于包含块的宽度2.3.2 每个块盒垂直方向上的auto值2.3.3 百分比取值2.3.4 上下外边距合并(margin塌陷)2.4 行盒2.4.1 盒子沿着内容延伸2.4.2 宽高不可…

Redis基础入门教程 - 概览

Redis基础教程 欢迎加好友一起讨论问题 知识地图:Redis概述与安装https://blog.csdn.net/lili40342/article/details/127852124Redis的5大数据类型https://blog.csdn.net/lili40342/article/details/127897689Redis的发布和订阅https://blog.csdn.net/lili40342/art…

C++模拟OpenGL库——图片处理及纹理系统(四):UV纹理坐标

目录 引入UV纹理坐标及三角形绘制设置 纹理过滤 引入UV纹理坐标及三角形绘制设置 上图其实不是很直观。 UV坐标要解决的问题就是: 假设我有一张500500的纹理图片; 我要把它映射到一张200200的图片中; 这个问题要怎么去解决。 这里提出…

【附源码】Python计算机毕业设计网络考试系统设计

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

百度第三季度财报前瞻:财务业绩预计将超预期

来源:猛兽财经 作者:猛兽财经 百度(BIDU)此前于2022年11月8日发布了一份媒体新闻稿,强调其将在2022年11月22日公布其第三季度财报。 分析师预计百度第三季度的财务业绩将有所改善 根据卖方分析师对百度的一致财务预测&…

基于GPU的kokkos加速安装

基于GPU的kokkos加速安装基于GPU的kokkos加速安装1. 安装lammps2. 安装cmake3. cmake相关文件修改4. cmake编译5. 测试安装lammps及相关库的步骤网上很多,这里介绍在前期步骤准备好的情况下,如果in文件中包含反应力 场以及需要通过voronoi库计算应力&…

【文本分类】《融合知识感知与双重注意力的短文本分类模型》

阅读摘要:   本文主要提出基于TextRCNN模型使用知识图谱、双重注意力感知来改进短文本分类,最终提高了精度。 参考文献:   [1] 融合知识感知与双重注意力的短文本分类模型 参考论文信息 (很牛) 论文名称&#xff1…

算法课实验报告解析(4班供参考)

有两个题1.第一题2.第二题1.第一题 &#x1f60b;题目描述&#xff1a; 给定一个整数数组A(ao&#xff0c;a1&#xff0c;…,an-1),若岗且ai>aj&#xff0c;则<ai.aj>就为一个逆序对。例如数组&#xff08;3,1,4,5,2,&#xff09;的逆序对有<3,1>、< 3,2>…

C++STL-string类的实现(上)

在上一篇中&#xff0c;我们知道了string类的一些基本使用&#xff0c;这一篇我们就说一下string类的具体的底层实现。 文章目录1.预前准备1.1 初步的构造和析构1.2 下标的运算符重载2. 深浅拷贝2.1 拷贝构造函数2.2 运算符重载3. 完善前面写的函数3.1 完善构造函数和析构函数…

【自用】Linux服务器部署Oracle并使用数据库管理工具Navicat远程连接(包含远程Navicat配置)

一、服务器端 配置 0.传输oracle安装包和依赖 1.更新依赖 yum update2.检测oracle依赖 rpm -ivh oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm # 请根据版本选择3.yum安装oracle-database-preinstall yum install oracle-database-preinstall-19c-1.0-1.el7.x86_6…

Azide-PEG-Cholesterol,N3-PEG-Cholesterol,叠氮-PEG-胆固醇PEG试剂供应

化学试剂胆固醇-聚乙二醇-叠氮,其英文名为Cholesterol-PEG-Azide&#xff08;Cholesterol-PEG-N3&#xff09;&#xff0c;它所属分类为DSPE PEG Azide PEG。 试剂胆固醇PEG叠氮的分子量均可定制&#xff0c;有&#xff1a;Cholesterol-PEG 2k-Azide、胆固醇-聚乙二醇 3.4k-叠…

SMBMS系统_准备工作

构建项目Maven/jar 初次构建项目时&#xff0c;思考是不是通过maven创建&#xff0c;使用maven的化需要导入那些依赖&#xff1b; 如果不是使用maven创建项目的话&#xff0c;使用哪些些jar包。 检测验证项目 选择使用maven创建项目完成&#xff0c;可以使用模板&#xff0c…

嵌入式分享合集106

一、可控硅控制电路实例 可控硅是可控硅整流器的简称。可控硅有单向、双向、可关断和光控几种类型。它具有体积小、重量轻、效率高、寿命长、控制方便等优点&#xff0c;被广泛用于可控整流、调压、逆变以及无触点开关等各种自动控制和大功率的电能转换的场合。 单向可控硅是一…

【CloudCompare教程】001:CloudCompare中文版下载与安装图文教程

CloudCompare是一款功能强大的点云后处理软件,本文讲解CloudCompare中文版下载与安装方法。 文章目录 一、CloudCompare下载地址二、CloudCompare安装教程三、CloudCompare中文设置一、CloudCompare下载地址 官方下载地址:http://www.danielgm.net/cc/release/ 二、CloudComp…

vue中使用wangeditor富文本编辑器

官方文档 项目中要求实现富文本编辑器取编辑内容 这种编辑器有好多选择了wangeditor富文本编辑器 首先根据文档安装 yarn add wangeditor/editor # 或者 npm install wangeditor/editor --saveyarn add wangeditor/editor-for-vuenext # 或者 npm install wangeditor/edit…