浅谈堆栈

本文深入解析Java中的数据类型、堆和栈的概念及其区别。详细阐述了基本类型与引用类型在内存中的存储方式,以及堆和栈在程序执行与数据存储中的作用。探讨了参数传递机制,解释了Java中垃圾回收的实现可能性。

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

1.数据类型
    1.1 基本类型:byte、short、int、long、char、float、double、boolean,存放在栈
    1.2 引用类型:类类型,接口类型和数组,简单来说就是除了八大基本类型,其他都是引用类型,存储在堆中
2.堆(heap)和栈(stack)
    栈的起始点是main函数,即程序运行的一个起点(入口)
    堆是存放数据的内存单元,即存储单元
    简单来说堆是物理单元,栈是逻辑单元
    总结:
        1.栈是运行单元,堆是存储单元
        2.栈是解决程序的运行问题,即程序如何执行,如何处理,或者说是逻辑、业务
          堆是解决数据存储的问题,即数据怎么放,放在那里,或者说是内存,缓存
        在java中一个线程就会有相应的一个线程栈与之对应,因为执行的逻辑不同,所以需要一个独立的线程栈。
        而堆则是所有线程共享的,因为这是存储单元,所有的线程都能访问。
问题一:为什么要把堆和栈区分出来,栈中不是也可以存储数据吗
        1.栈代表了处理逻辑,堆代表了数据,这样分开,使得处理逻辑更为清晰,分而治之的思想。
        这种隔离、模块化的思想在软件设计的方方面面都有体现。
        2.堆和栈的分离,使得堆中的内容可以被多个栈共享
        3.栈因为运行时需要,比如保存系统运行的上下文,需要进行地址段的划分。
        栈只能向上增长,因此就会限制住栈存储内容的能力。
        堆中的对象是可以根据需要动态增长的。
        因此栈和堆的拆分使得动态增长成为可能,相应栈中只需要记录堆的一个地址即可。
        简单来说,栈中可以存放的只有对象的地址信息,堆是存储对象信息。
问题二:堆中存什么,栈中存什么
        1.栈存放的都是跟当前线程相关的信息
        2.堆中存放的是对象信息
问题三:为什么不把基本类型放堆中
        1.其占用的空间比较少
        2.长度固定,因此栈中存储就够了,如果在堆中存储就没有什么意义
        简单来说堆中存储的是引用类型,长度不固定,栈中存储的是基本类型以及引用类型的地址信息,长度固定。
问题四:java中的参数传递是传值还是引用
        1.对象传递是引用传递,基本类型的数据传递是值传递
        2.方法的参数传递,传递地址信息,所以是引用传递
        3.堆和栈的分离思想,才使得java的垃圾回收成为可能
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值