堆栈与堆的区别

原创 2012年03月29日 10:48:02


堆栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,java自动管理栈和堆,程序员

不能直接的设置栈或者堆。从堆和栈的功能来通俗的比较,堆主要用于存放对象,栈主要是用来执行程序的。这

种不同是由于堆栈和堆的特性决定的,以下是它们在概念上的区别:


堆栈位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些缓存。这是一种快速有效的分配存储方式,仅次于寄存器。创建程序时,java系统必须知道存储在堆栈内的所有项的确切生命周期,以便上下移动堆栈指针。 这一约束限制了程序的灵活性,所以虽然某些java数据存储于堆栈中---特别是对象引用,但是java对象并不存储于其中。


一种通用的内存池(也位于RAM区),用于存放所有的java对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当需要一个对象时,只需要用new写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须要付出相应代价:用堆进行存储分配和清理可能比用堆栈进行存储分配需要更多的时间(如果确实可以在java中像在C++中一样在栈中创建对象)。


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


堆(heap):是一个可动态申请的内存空间(其记录空闲内存空间的链表由操作系统维护),C中的malloc语句所产生的内存空间就在堆中。在java中,所有使用new xxx()构造出来的对象都在堆中存储,当垃圾回收器检测到某对象未被引用,则自动销毁该对象。所以,理论上说java中对象的生存空间是没有限制的,只要有引用类型指向它,则它就可以在任意地方被使用。



堆栈,堆栈,堆和栈的区别

非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥! 堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— ...
  • FrankieWang008
  • FrankieWang008
  • 2014年05月19日 13:55
  • 2170

操作系统中栈与堆的理解

在数据结构中栈具有先进后出的(First in Last Out FIFO)的特性,而在计算机系统中,栈是一个具有以上属性的动态内存区域。程序可以将数据压入栈中,也可以将数据从栈中弹出。压栈的操作使得...
  • xiaokugua_250
  • xiaokugua_250
  • 2015年01月16日 14:55
  • 1223

什么是“堆”,"栈","堆栈","队列",它们的区别?

转自:http://jingyan.baidu.com/article/6c67b1d6a09f9a2786bb1e4a.html 博主总结: 栈=堆栈(栈的别名)!=堆 堆:什么是堆...
  • DT2131
  • DT2131
  • 2017年03月11日 13:05
  • 1461

【C#】堆、栈和堆栈的区别

导读:今天看视频,就看到了堆、栈这一块了。顿时就来劲儿了,为什么呢,...
  • u013034889
  • u013034889
  • 2014年10月24日 14:24
  • 2279

编程_堆和栈的区别

本文简单介绍了堆和栈的区别。
  • cc214042
  • cc214042
  • 2016年10月03日 18:19
  • 1171

语言堆栈入门——堆和栈的区别

原文:http://student.csdn.net/link.php?url=http://www.top-e.org%2Fjiaoshi%2Fhtml%2F427.html 格式和部分内容稍作修...
  • GarfieldEr007
  • GarfieldEr007
  • 2017年02月22日 22:51
  • 1112

数据结构和内存中堆和栈的区别

转自http://blog.csdn.net/Fiorna0314/article/details/49757195 特别声明:本文参考了博客:http://blog.csdn.NET/wol...
  • xiaoxik
  • xiaoxik
  • 2016年10月27日 17:07
  • 852

Java之美之JVM 中堆栈的区别

一。------------------------------------------------------------ 堆--用new建立,垃圾自动回收负责回收 1、堆是一个"运行时...
  • wangjia55
  • wangjia55
  • 2013年04月07日 23:50
  • 2412

深入理解JavaScript中的堆与栈 、浅拷贝与深拷贝

JavaScript中的浅拷贝与深拷贝   学了这么长时间的JavaScript想必大家对浅拷贝和深拷贝还不太熟悉吧,今天在项目中既然用到了,早晚也要理清一下思路了,在了解之前,我们还是先从Jav...
  • flyingpig2016
  • flyingpig2016
  • 2016年10月22日 22:53
  • 4173

Java中的基础----堆与栈的介绍、区别

堆和栈都是Java中常用的存储结构,都是内存中存放数据的地方。 栈:基本数据类型的变量(int、short、long、byte、float、double、boolean、char等)以及对象的引用变量...
  • Emira_J
  • Emira_J
  • 2016年04月24日 11:16
  • 15281
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:堆栈与堆的区别
举报原因:
原因补充:

(最多只允许输入30个字)