java栈堆的理解

博客介绍了Java在RAM(运行内存)中存放数据的地方,主要涉及栈(stack)和堆(heap)。栈和堆是Java在运行内存中存储数据的重要区域。

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

栈(stack) 堆(heap)是用java在ram(运行内存)中存放数据的地方

栈:优点:存取速度快,
       缺点:数据的大小和生存期必须明确,缺乏灵活性。

堆:优点:可以动态的分配内存大小,生存期也不需要提前告诉编译器,编译器的垃圾回收机制会自动回收不需要的数据
      缺点:需要动态的分配内存,所以存取速度慢

栈: 在栈中存放的数据可以被共享,如
    int a=3;
    int b=3;
首先编译器会在栈中创建一个变量a的引用,然后查找是否存在3这个值,如果没有就开辟一个存放3这个值的地址,然后将a指向3的地址。
然后处理b=3;先在栈中创建b的引用,在查找3这个值是否存在,存在便将b指向这个地址,这样a和b就共享了一个数据了。

java的基本数据类型存放在栈中,基本数据类型的包装对象存放在堆中。
用new创建的对象都在堆中

(1)我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,我们创建了String类的对象str。担心陷阱!对象可能并没有被创建!唯一可以肯定的是,
                指向 String类的引用被创建了。至于这个引用到底是否指向了一个新的对象,必须根据上下文来考虑,除非你通过new()方法来显要地创建一个新的对象。因 此,
               更为准确的说法是,我们创建了一个指向String类的对象的引用变量str,这个对象引用变量指向了某个值为"abc"的String类。
               清醒地认 识到这一点对排除程序中难以发现的bug是很有帮助的。

比较包装类的值时用equals()方法,判断两包装的引用地址是否指向一个对象的时候用==。

栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量。所有的基本类型和对象的引用都存在栈中,栈中生存空间一般在当前scopes内就是由{}扩起来的部分

堆(heap):是一个可动态申请的内存空间,new出来的对象存在堆里面的,生存空间是由编译器回收垃圾机制来处理(根据对象是否被引用)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值