JAVA-理论-堆和栈的概念

学java总是遇到堆和栈的问题:
以下为我对堆和栈的理解

答案一

1)栈内存和堆内存的概念(基于JAVA)
	区别:
		栈内存(直接分配内存,有固定大小)和 堆内存(需要手动分配,无固定大小);
		https://blog.csdn.net/xdd19910505/article/details/41900693
	
	引用访问:
		Book book=null;声明了一个对象的栈区空间
		new Book([参数1][参数2]....) ; 在jvm的堆内存 就有有了一个块空间;
		book =new Book(...) ; 把内存地址给栈内存

答案二

  1. 和堆一样存储在计算机 RAM 中。

  2. 在栈上创建变量的时候会扩展,并且会自动回收。

  3. 相比堆而言在栈上分配要快的多。

  4. 用数据结构中的栈实现。

  5. 存储局部数据,返回地址,用做参数传递。

  6. 当用栈过多时可导致栈溢出(无穷次(大量的)的递归调用,或者大量的内存分配)。

  7. 在栈上的数据可以直接访问(不是非要使用指针访问)。

  8. 如果你在编译之前精确的知道你需要分配数据的大小并且不是太大的时候,可以使用栈。

  9. 当你程序启动时决定栈的容量上限。

Heap:

  1. 和栈一样存储在计算机RAM。

  2. 在堆上的变量必须要手动释放,不存在作用域的问题。数据可用 delete, delete[] 或者 free 来释放。

  3. 相比在栈上分配内存要慢。

  4. 通过程序按需分配。

  5. 大量的分配和释放可造成内存碎片。

  6. 在 C++ 中,在堆上创建数的据使用指针访问,用 new 或者 malloc 分配内存。

  7. 如果申请的缓冲区过大的话,可能申请失败。

  8. 在运行期间你不知道会需要多大的数据或者你需要分配大量的内存的时候,建议你使用堆。

  9. 可能造成内存泄露。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值