java堆栈内存

堆栈


java中我们把java内存分为两种一种是栈内存,一种则是堆内存

一、堆栈

在计算机领域,堆栈设计一个不容忽视的概念,堆栈是一种数据结构。堆栈是一种数据结构。堆栈都是一种书库项按顺序排列的数据结构,只能在一端对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。
1、java内存分配中的栈
在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java在栈中为这个变量分配内存空间,当该变量退出其作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
2、java内存分配中的堆
堆内存是用来存放由new创建的对象和数组。在堆中 分配的内存,由java虚拟机自动垃圾回收机制来进行统一管理。。在堆中产生了一个数组或对象,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象。引用变量就相当于是为数组或者对象起的一个名称。

栈中的变量指向堆内存中的变量,这就是Java中的指针!常量池(constant pool)
3、栈中的变量指向堆内存中的变量,这就是Java中的指针!常量池(constant pool)
JAVA中的常量池,实际上分为两种形态:静态常量池和运行时常量池。
所谓静态常量池,即*.class文件中的常量池,calss文件中的常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入内存中,并保存在方法区中,我们常说的常量池,就是值方法区中的运行时常量池。

对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象由垃圾回收器负责回收,因此大小和生命周期是不需要确定,具有很大的灵活星。
对于字符串:其对行的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能去顶的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米奇妙妙wu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值