java中栈和堆的区别求解
发布网友
发布时间:2022-02-28 14:46
我来回答
共2个回答
热心网友
时间:2022-02-28 16:16
Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程。它主要用来存储线程执行过程中的局部变量,方法的返回值,以及方法调用上下文。栈空间随着线程的终止而释放
Java中堆是由所有的线程共享的一块内存区域,堆用来保存各种JAVA对象,比如数组,线程对象等
由于String类型比较常用,并且String类一旦生成就不可以修改,所以如果每次都生成一个String类型则比较浪费空间,所以java里面维护一个String的常量池.
String str = "abc";过程如下,首先到常量池里面查找是否有abc的字符串对象,如果有则直接放回其地址,如果没有则new一个abc出来放入常量池.并返回其地址.追问这个常量池是存在于堆中还是栈中呢?我现在的问题是:如果这个abc不存在的话,这个new一个abc是怎样new出来的。有点钻牛角尖了,还望细心解答!
追答abc这个对象应该是放在堆上的,其引用变量str是放在栈上的.如果不存在的话,首先在堆上new一个对象,然后将这个对象地址放入常量池中(可能是一个List),同时把地址返回给str.
热心网友
时间:2022-02-28 17:34
java 对字符串做了优化,为了提高效率。java中有一个“池”的东西,应该是堆,我不太清楚。当创建字符串时,会在池中搜索,如果有,就将声明的引用直接指向这个字符串;没有的话,就在池中创建一个字符串,再将声明的引用指向这个新创建的字符串。这样可以节约内存空间。
如果已有的字符串执行了类似String str="a"; str=str+"bcd"; 的操作,就会在池中搜索是不是存在"abcd"的字符串,如果有,就不会再创建新的字符串了,只是将引用指向了“asdf”追问但是Sting str ="a" 其实是隐式的创建了一个对象,并且为这个对象开辟存储空间,包装数据类型和基本数据类型不一样,包装数据类型是一个类,每创建一个引用且为这个引用赋值时就应该会创建一个对象,但是这个对象的创建过程是怎样的呢?和直接 new string("a")有什么区别呢?
堆内存和栈内存的区别
1、内存区域不同 堆内存是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间。栈内存在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。2、特点不同 堆内存实际上指的就是优先队列的一种数据结构,第1个元素有最高的优先权...
java 中的堆和栈有什么区别?要详细点的 !
1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动...
java中堆和栈的区别主要在于
第一,从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分开,使得处理逻辑更为清晰。分而治之的思想。这种隔离、模块化的思想在软件设计的方方面面都有体现。第二,堆与栈的分离,使得堆中的内容可以被多个栈共享(也可以理解为多个线程访问同一个对象)。这种共享的收益是很多的。一方面...
请简单通俗易懂的解释一下在Java中什么叫堆 什么叫栈 谢谢
在java中的栈:栈的原理明白了,其实只要是计算机只要是编程语言,什么堆什么栈都是一样的,基本作用也一样。java中可以认为,栈用来存放局部变量的。public void fun(){ int i=0; //i 是一个局部变量,存放在栈里面的 Object obj = new Objec(); //obj 是一个对象应用,同样也是一个局部变量...
java中什么是堆和栈
栈也是java中的一种内存,是用来执行程序,例如基本类型的变量和对象的引用变量。其优势是存取速度相对于堆要快一些,而且数据可以共享,但栈中的数据大小与生存必须确定,缺乏灵活性。java语言属于混合型语言,是解释型语言和编译型语言之间的一种语言,是一个支持网络计算的面向对象程序设计语言,吸收了...
堆(heap)和栈(Stack)的区别是什么?为什么平时都把堆栈放在一起讲...
一、主体不同 1、堆:是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。2、栈:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。二、特点不同 1、堆:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全...
堆和栈的区别是啥?
堆和栈的区别:一.堆栈空间分配区别:1.栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;2.堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。二.堆栈缓存方式区别:1.栈使用...
请高手详细的解答一下JAVA的堆,栈,方法区,谢谢。
java堆:是虚拟机中所管理的内存中区域最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。java堆是垃圾收集器管理的主要区域。java虚拟机栈:线程私有的,它的生命周期与线程相同。每个方法被执行的时候都会...
Java中堆和栈创建对象的区别
堆和栈是信息学数据结构通用名词,不仅在Java中,C++里也有调用模板。堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全树。将根节点最大的堆叫做最大堆或大根堆,...
java堆和栈的区别
String是一个特殊的包装类数据。可以用:String str = new String("abc");String str = "abc";两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",...