面试官问我:你确定JVM堆内存是共享的?

关于Java堆内存是线程共享的吗? 首先,在JVM的内存结构中,比较常见的两个区域是堆内存和栈内存关于这两个概念的介绍一般如下: 1、堆是线程共享的内存区域,栈是线程独享的内存区域。 2、堆中主要存放对象实例,栈中主要存放各种基本数据类型、对象的引用。 但是其实以上两个结论并不是完全正确的。 在解释原因之前首先抛出个问题:Java对象的内存分配过程是如何保证线程安全的? Java对象的内存分配过程是如何保证线程安全的? Java是一门面向对象的语言,我们在Java要使用的对象都需要被创建出来,在Java中,创建一个对象的方法有很多种,但是无论如何,对象在创建过程中,都需要进行内存分配。 对象的内存分配过程中,主要是对象 立即下载

Java堆的区域都是线程共享的吗?

当你听到这个问题的时候,你首先想到的是什么呢?

let me tell you

面试官其实问这个的时候就是在看你对堆的了解程度,你只知道是用来放对象实例的,那面试官对你表现觉得不算非常满意;但是如果你知道TLAB,并且知道它的原理和问题,那面试官就会觉得:这小伙子不一般,我得再多深入了解了解,可以考虑当我的好助手

图片

首先,你得肯定回答,没错,堆是全局共享的,但是会存在一些问题

就是多个线程在堆上同时申请空间,如果在并发的场景中,两个线程先后把对象引用指向了同一个内存区域,那可能就会出现问题;为了解决这个问题呢,就得进行同步控制,说到同步控制,就会影响到效率

就拿Hotspot来举例子,它的解决方案是每个线程在堆中都预先分配一小块内存,然后再给对象分配内存的时候,先在这块“私有内存”进行分配,这块用完之后再去分配新的“私有内存”,这就是TLAB分配

你也看到了,我加引号了,它并不是真正意义上的私有,而是表面上的私有

它是从堆内存划分出来的,有了TLAB技术,堆内存并不是完完全全的线程共享,每个线程在初始化的时候都会去内存中申请一块TLAB

切记:并不是TLAB区域的内存其它线程完全无法访问,其它线程也是可以读取的,只不过无法在这个区域分配内存而已

说到这的时候,也给面试官一个眼神,说明我的干货还没完,我还能继续吹

难道TLAB很完美吗?所谓,金无足赤人

程序设计二(面向对象)_实训10_复杂类的实现_ArrayList类的实现 第1关:构造函数与析构函数的实现 阅读详情

相关推荐

qcc51xx如何配置spdif输入

qcc51xx如何配置spdif输入。

Alex_886的博客 1373

SAP CO实战:如何用KKA2/CJ88结果分析码搞定项目收入成本匹配(附真实案例)

本文深入解析了SAP CO模块中结果分析码KKA2/CJ88的核心应用,通过真实案例详细阐述了如何在成本波动剧烈的销售型项目中,运用结果分析实现收入与成本的精准匹配。文章重点拆解了不同结果分析方法的适用场景与财务影响,并提供了从配置、操作到问题排查的完整实战指南,帮助财务顾问提升项目财务管理能力。

qsc9012345的博客 608

Intel RealSense D435 深度相机详解

Intel RealSense D435 深度相机是 Intel 推出的一款基于深度感知技术的相机,广泛应用于机器人、无人机、增强现实(AR)、虚拟现实(VR)、3D扫描、智能监控等领域。D435 是 RealSense 系列中较为高端的深度相机之一,结合了深度传感和 RGB 摄像技术,为用户提供高精度的深度数据和高质量的图像捕捉能力。

crasher123的博客 2944

【通过STM32CubeMx配置LWIP+FreeRTOS并通过Socket实现TCP_Client/Sever】

生成KEIL工程之后,勾选上use MicroLIB,代码上暂时无需做其他修改,编译下载。由于使用了FreeRTOS,因此系统的TimeBase Source修改成TIM1。在CubeMx上面选择NUCLEO-F429ZI开发板,并采用默认配置。打开电脑命令行,去ping这设置好的IP,能够实现Ping通。使能LWIP,并且先禁用DHCP,设置好静态IP。修改defaultTask的栈大小。Platform选择LAN8742。修改堆栈大小,生成工程。使能FreeRTOS。

qq_42617357的博客 6111

QGIS中高效处理CAD数据的两种实用技巧

本文详细解析了在QGIS中高效处理CAD数据的两种核心方法。针对DWG/DXF文件在QGIS中直接打开失败的问题,介绍了使用QGIS内置数据导入管理器进行标准化转换的流程,并重点推荐了功能更强大的Another DXF Importer插件,以更好地保留文字、块属性等复杂信息。文章对比了两种方法的优劣与适用场景,并提供了坐标系设置、中文乱码等常见问题的避坑指南,帮助用户根据数据需求选择最佳导入策略。

weixin_28363123的博客 117

newman的使用

Newman是一个基于Node.js的postman命令行工具,用于运行和测试PostmanAPI 请求的集合。它允许用户在命令行环境中执行Postman的JSON文件,从而实现接口自动化测试和持续集成,同时支持用户进行自动化测试、批量执行请求、生成报告等操作。

m0_62825058的博客 1616

多摄像头场景下 ISP 的同步与调度机制实战解析

在智能手机多摄系统中,主摄、广角、长焦、微距等摄像头的协同工作能力直接决定了影像系统的体验上限。而支撑这一能力的核心之一,正是 ISP 的同步与调度机制。ISP 需要处理多个 Sensor 的输入流、统一时序、资源仲裁、并发调度,并支持在不同模式间快速切换(如预览 → 拍照 → 视频)。本文将基于 Qualcomm、MTK、HiSilicon 平台的实际架构,系统性剖析 ISP 在多摄场景下的时序控制、Pipeline 配置、Buffer 管理与故障恢复机制,并分享实战中的典型问题与调试方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2347

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 你在备战“字节”时一定需要这个,程序员进大厂指南+算法已开源
下一篇: 别再面向 for 循环编程了,Spring 自带的观察者模式就很香!
Java斗帝之路
博客等级 码龄7年 2392粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值