请简单通俗易懂的解释一下在Java中什么叫堆 什么叫栈 谢谢
发布网友
发布时间:2022-03-30 22:05
我来回答
共1个回答
热心网友
时间:2022-03-30 23:34
堆:也叫动态内存,相当于一个内存池子,在java中创建对象的时候,就从堆里面拿出一块来存放对象;当GC(垃圾回收)回收对象的时候,又把对象占用的内容还给堆。
举个例子:堆就好比一个面团,类就好比一个馒头印子,用印子从面团中取出一小块面团,印成馒头,这个馒头就是这个馒头印子类产生的对象了。当无限的创建馒头的时候,这个面团总会被用光的,这个时候就不能在创建新的馒头了。
所有GC就有存在的必要了,当对象不被持有的时候,GC就会把对象还给堆。也就是,当这个馒头没有被使用,这个馒头就变成小面团,还给面团。
栈:也是一段内存,但是这段内存比较有特点,遵循一个先进后出的规则。
举个例子:吃过罐装的薯片吧,薯片一片一片的放到罐里面去,想想,最先放进去的是不是放在罐的最底部。现在一片片把薯片取出来,是不是要从最顶部开始去,也就是最后放进去的,最先取出来。这个薯片放进去和取出来的这个过程,就是栈的工作原理啦(先进入的后出来,后进入的先出来)
在java中的栈:栈的原理明白了,其实只要是计算机只要是编程语言,什么堆什么栈都是一样的,基本作用也一样。java中可以认为,栈用来存放局部变量的。
public void fun(){
int i=0; //i 是一个局部变量,存放在栈里面的
Object obj = new Objec(); //obj 是一个对象应用,同样也是一个局部变量,存放在站里面的,但是obj指向的对象,在存在堆中
}
请简单通俗易懂的解释一下在Java中什么叫堆 什么叫栈 谢谢
堆:也叫动态内存,相当于一个内存池子,在java中创建对象的时候,就从堆里面拿出一块来存放对象;当GC(垃圾回收)回收对象的时候,又把对象占用的内容还给堆。举个例子:堆就好比一个面团,类就好比一个馒头印子,用印子从面团中取出一小块面团,印成馒头,这个馒头就是这个馒头印子类产生的对象了。...
java中什么是堆和栈,如何应用,最好举个例子,并详细地说明一下...
Java把内存划分成两种:一种是栈内存,一种是堆内存。 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 堆内存...
请高手详细的解答一下JAVA的堆,栈,方法区,谢谢。
java堆:是虚拟机中所管理的内存中区域最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。java堆是垃圾收集器管理的主要区域。java虚拟机栈:线程私有的,它的生命周期与线程相同。每个方法被执行的时候都会同...
java语言中提及的“堆”主要有什么用?“栈又有什么用?”
Java把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。 堆内存用来...
堆栈、静态区、堆这三者有什么区别呢,在C语言或java中有区别吗
但是注意p1、p2本身是在栈中的。2.2 申请后系统的响应 栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲...
堆(heap)和栈(Stack)的区别是什么?为什么平时都把堆栈放在一起讲?
1、堆:是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。2、栈:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。二、特点不同 1、堆:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。2、栈...
C语言堆和栈的区别用比喻,举例子说明?
堆和栈的区别可以引用一位前辈的比喻来看出:使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且...
什么是堆栈,请利用通俗易懂的语言解释
语句2: char str1[100];语句3: char* str2 = new char[100];语句1的两个变量都是存放在栈里 语句2的str1也是存放在栈里 语句3的str2存放在堆里 可以简单的说,不是用 new 申请空间的局部变量都是存放在栈里 ,注意是局部变量,全局变量不是!通俗的说下堆和栈:比如说一个慈善家建了一栋楼...
栈和堆分别用于存放什么样类型的变量?引用和对象又是分别放于哪个中?请...
栈内存用于存放局部变量,堆内存是在程序执行过程中动态的进行内存分配,对象都是放在堆内存中,因为它是在程序执行过程中动态创建的,而引用如果是作为局部变量是放在栈内存中的,如果它作为一个对象的成员变量则它是跟这个对象一起放在堆内存中的 ...
java堆栈问题~~~
堆栈会有一个量来标识栈顶,也就是标识出堆栈里最后放进去的数据在什么位置。堆栈可以进行的操作最基本的是两个:一个进栈(push)一个出栈(pop),也有叫压入弹出的。进栈的时候要判断栈是否已满,已满的堆栈不能进栈,弹夹满了,子弹肯定压不进去了。出栈的时候要判断栈是否为空,弹夹空了要卸...