在我们定义数据的时候,是否想过这些数据存放在哪儿呢? 我们先来粗略了解一下 常量池、stack(栈内存)和 heap(堆内存)
常量池
常量池,顾名思义,它是存放基本数据类型常量和字符串常量的一个内存区域,或者说它是存放字面值的一个内存区域
对于基本数据类型(整型、浮点型、布尔型、字符型等)或字符串类型进行赋值的时候会先扫描常量池是否存在这样一个字面值,若存在,则会将变量指向它;若不存在,则会在常量池创建该值,再让变量指向它
常量池的划分使得避免重复创建同一数据,程序性能大幅度提高,同时实现对象共享
栈内存
若将内存空间比喻成一个商场,栈内存就可以说是一个柜台,柜台里放什么呢?
对于体积小的物品,比如香水、项链,毫无疑问会放在柜台里进行摆放,一眼望去,就能拿到这个物品。而对于体积庞大的东西呢?比如床板、窗帘,会放在柜台里吗?自然是不会,但细心的小伙伴一定会发现,家居店里的前台不仅会摆放体小易放的家具,同时也会将大型家具的样板图片放在柜台展示,而图片背后会写上这个家具的存放位置。
栈内存亦是如此,它存放的是基本数据类型的变量名和引用数据的地址,基本数据类型的变量名指向常量池里的字面值,引用数据的地址指向堆内存里数据的位置
栈内存的划分使得数据的存取速度大幅度提升,仅次于CPU中的寄存器
堆内存
与柜台所对应的,则是货物存放区,货物存放区存放体积较大、不便放在前台的物品。而堆空间可以说是内存空间的货物存放区,即堆空间存放新建的数组或对象
最后一张图奉上