浅谈 java 内存(堆栈、常量池)

本文探讨了计算机程序中常量池、栈内存和堆内存的区别与作用,包括常量池的高效存储、栈内存的快速访问和堆内存的大容量存储,以及它们如何影响程序性能和数据共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在我们定义数据的时候,是否想过这些数据存放在哪儿呢? 我们先来粗略了解一下 常量池、stack(栈内存)和 heap(堆内存)

       常量池

        常量池,顾名思义,它是存放基本数据类型常量和字符串常量的一个内存区域,或者说它是存放字面值的一个内存区域

        对于基本数据类型(整型、浮点型、布尔型、字符型等)或字符串类型进行赋值的时候会先扫描常量池是否存在这样一个字面值,若存在,则会将变量指向它;若不存在,则会在常量池创建该值,再让变量指向它

        常量池的划分使得避免重复创建同一数据,程序性能大幅度提高,同时实现对象共享

       栈内存

        若将内存空间比喻成一个商场,栈内存就可以说是一个柜台,柜台里放什么呢?

        对于体积小的物品,比如香水、项链,毫无疑问会放在柜台里进行摆放,一眼望去,就能拿到这个物品。而对于体积庞大的东西呢?比如床板、窗帘,会放在柜台里吗?自然是不会,但细心的小伙伴一定会发现,家居店里的前台不仅会摆放体小易放的家具,同时也会将大型家具的样板图片放在柜台展示,而图片背后会写上这个家具的存放位置。

        栈内存亦是如此,它存放的是基本数据类型的变量名和引用数据的地址,基本数据类型的变量名指向常量池里的字面值,引用数据的地址指向堆内存里数据的位置

        栈内存的划分使得数据的存取速度大幅度提升,仅次于CPU中的寄存器

       堆内存

        与柜台所对应的,则是货物存放区,货物存放区存放体积较大、不便放在前台的物品。而堆空间可以说是内存空间的货物存放区,即堆空间存放新建的数组或对象

        最后一张图奉上

 

                        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值