堆和栈一直分得不太清楚,所以今天决定整理一下
结构:
栈(stack)又名堆栈,它是一种先进后出(FILO)的线性表。
特点:容量小 速度快 适合存放小型数据 如 基本数据类型和对象类型的引用
堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。常见的堆有二叉堆、斐波那契堆等。
堆的特点和栈相反 : 因此适合存放对象本身
功能作用比较:
从堆和栈的功能和作用来通俗的比较,堆主要用来存放对象的,栈主要是用来执行程序的.
JAVA中运行机制:
与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
堆内存用来存放由new 创建的对象和数组,由GC回收内存。分配和销毁时都要占用时间,因此用堆的效率非常低.但是堆的优点在于,编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间,因此,用堆保存数据时会得到更大的灵活性。
Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配,也就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。
最后附一张简单堆和栈区分的图片:
- 大小: 32.2 KB
分享到:
相关推荐
堆和栈究竟有什么区别? 主要的区别由以下几点: 1、管理方式不同; 2、空间大小不同; 3、能否产生碎片不同; 4、生长方向不同; 5、分配方式不同; 6、分配效率不同;
栈是由编译器在需要时分配的,不需要时自动清除的变量存储区。里面的变量通常是局部变量、函数参数等。堆是由malloc()函数(c++语言为new运算符)分配的内存块,内存释放由程序员手动控制...栈和椎的主要区别有以下几点:
堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈...
10.请讲述堆和栈的区别 11.全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的 12.new、delete、malloc、free之间的关系 13. 头文件种的ifndef/define/endif 是干什么用的 14.TCP和UDP...
该文档主要整理了常见的Java基础面试题,包含以下内容: 1. 抽象类和接口的区别 2. 什么时候使用抽象类,什么时候使用接口 3. 八大基本数据类型,所占字节数 4. List、Set、Map的区别 ...35. 堆和栈的区别
堆和栈、全局变量和局部变量、生存期和作用域、内部函数和外部函数、指针变量、指针数组和数组指针、指针函数和函数指针、传址和传值、递归和嵌套、结构体和共用体、枚举、位域等较难理解的核心概念的阐述和对比...
堆和栈、全局变量和局部变量、生存期和作用域、内部函数和外部函数、指针变量、指针数组和数组指针、指针函数和函数指针、传址和传值、递归和嵌套、结构体和共用体、枚举、位域等较难理解的核心概念的阐述和对比...
简答题 22 1.面向对象的特征有哪些方面 22 ...21. 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。 29 22.swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? 31
在实现栈的基本操作时,需要考虑以下几点: - 栈可以用数组或链表实现。使用数组时,需要考虑数组大小的限制;使用链表时,需要考虑内存管理。 - 在入栈操作时,需要检查栈是否已满(如果使用数组实现的话),如果...
堆和栈的区别 20.ejb的分类及区别 21.你对现在软件业以及国内软件业的看法 22.谈谈java多线程 23.谈谈文件加密技术 24.软件开发生命周期 25.路由协议种类及特点 26.java的awt和swing组件的GUI设计的关键 27....
关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师...
【基础】重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分? 17 【基础】abstract class和interface有什么区别? 18 【基础】静态嵌套类(Static Nested Class)和内部类(Inner Class)...
关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师...
关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师...
5,、解释堆和栈的区别? 答: (1)栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 (2)堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由...
8.8 关于计算器要注意的最后几点 8.9 用于计算平方根的牛顿算法 8.10 分期付款表 8.11 资源和参考资料 第9章 数据压缩 9.1 行程编码 9.2 霍夫曼压缩 9.2.1 代码 9.2.2 其他问题 9.3 ...
C++面试题 ...整理:松鼠 时间:2009-5-8 1、const 有什么用途?(请至少说明两种) 答: (1)可以定义 const 常量 ...(Google搜):DOS下程序是独占方式,堆分为近堆和远堆,近堆和栈是在数据段开辟的同...
(52) 栈和队列的共同点是(C) 注:这一共同点和线性表不一样 A. 都是先进后出 B. 都是先进先出 C. 只允许在端点处插入和删除元素 D. 没有共同点 (53) 已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序...
4、队列和栈有什么区别? 队列先进先出,栈后进先出 5、写出下列代码的输出内容 #include int inc(int a) { return(++a); } int multi(int*a,int*b,int*c) { return(*c=*a**b); } typedef int(FUNC1)(int in); ...
10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main 函数的参数 166...