java 中的堆栈是什么

作者&投稿:剑妹 (若有异议请与网页底部的电邮联系)
java中什么是栈啊?~

存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)。

栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定。

局部变量的数据存在于栈内存中。

栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量数据(int, short, long, byte, float, double, boolean, char)和对象句柄(引用)。

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。
堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。
引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!

首先堆栈是计算机为程序分配的内存空间,用来存储数据的。
在java中因为我们不直接操作内存,所以并不需要考虑指针的问题

在java中堆和栈也是用来存储数据,其中栈存储的引用,堆存储的对象

如:Student s = new Student("张三");
s在栈中 张三在堆

您好!
堆用来存放引用对象,new一个对象之后就会在内存中的堆里开辟一片空间给这个对象,并把它的引用(地址)赋给引用变量,如 String s=new String();
栈的基本特点就是先进后出,栈主要存3种:1)值类型存在栈里2)引用类型存在堆里在栈中记录引用3)另外还有个栈是线程栈,线程栈就是一个线程里面函数调用的栈,main函数先压进栈再压进调用的其他函数(包括函数的字段等)
栈和堆都是内存区域
敬请采纳!
中国物联网校企联盟

栈 是先进后出,有一定顺序的
堆 是程序开辟的内存空间,用来保存对象,是无序的。

栈的主要作用是存储 方法的执行顺序,
如 main()方法调用 go()方法;然后用go()方法调用relase()方法,
那么这三个方法就会按照main>go>relase 的顺序存储在栈中,按照栈的规则,会先执行relase>go>main;


通化县18558768461: java堆栈是啥 -
丁夜冠沙: 简单的说:Java把内存划分成两种:一种是栈内存,一种是堆内存.在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配.当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作...

通化县18558768461: java 中的堆栈是什么 -
丁夜冠沙: 首先堆栈是计算机为程序分配的内存空间,用来存储数据的. 在java中因为我们不直接操作内存,所以并不需要考虑指针的问题在java中堆和栈也是用来存储数据,其中栈存储的引用,堆存储的对象如:Student s = new Student("张三"); s在栈中 张三在堆

通化县18558768461: 什么是JAVA堆栈 -
丁夜冠沙: Java中堆栈的概念是逻辑上的,在完全符合Java规范的Java处理器面世之前,所有Java虚拟机提供的内容都是由软件模拟出来的. 什么叫堆?你用十几个麻将牌竖直叠成一摞这叫堆,你可以从上面、下面、中间任意抽出一张牌,也可以任意插...

通化县18558768461: java中的堆栈详解
丁夜冠沙: 简单的说 其实 栈 就是存放变量引用的一个地方, 堆 就是存放实际对象的地方 也就是. 比如: int i = 7; 这个 其实是存在栈里边的.内容为 i = 7. Apple app = new Apple(); 这个 app 是在栈里边的 他对应的是一个内存地址也在堆里边, 而这个内存地址对应的是堆里边存放 Apple 实例的地址. String s = "Hello World!"; 这个其实是存在另外一块静态代码区.总体来说: 栈--主要存放引用 和基本数据类型. 堆--用来存放 new 出来的对象实例.

通化县18558768461: java中堆和栈的意思 -
丁夜冠沙: 堆和栈都是内存空间管理结构,但是在堆上空间可以任意分配,而栈只能在栈顶分配.每个JVM只有一个堆,每个Thread都有一个栈.栈用来分配Java method中的局部变量,而实例变量则在堆上.打个比方,有一个长为10的空间[1-10],而你需要长为2的空间,如果是堆,可能是[1-2],也可能是[2-3],[3-4]...而栈只能是[1-2].如果还不明白,参考《数据结构》《Java虚拟机规范》和《算法分析》中的递归与分治.

通化县18558768461: java堆栈是啥
丁夜冠沙: java在执行过程中会划分4个内存区域(heap、stack、data segment、code segment) java开始执行会把代码加载到code segment区域然后找到main方法开始执行 data segment是存放静态变量字符串常量 stack(堆):是存放局部变量等 heap(栈):放new出来的东西 举例:Student st1=new Student(); st1是对象的引用,它存放在栈中.可以把它理解为一个指针,指向所存放在堆中的对象. 而int,double,float等原始数据类型则存放在栈中.这是由于分配栈的速度比分配堆的速度快的多,而这些数据经常使用.

通化县18558768461: JAVA中堆和栈的概念 -
丁夜冠沙: 堆是先进先出,而栈是先进后处1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器.但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性.另外,栈数据可以共享,详见第3点.堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据.但缺点是,由于要在运行时动态分配内存,存取速度较慢.

通化县18558768461: java中的堆栈详解 -
丁夜冠沙: 首先堆栈是计算机为程序分配的内存空间,用来存储数据的.在java中因为我们不直接操作内存,所以并不需要考虑指针的问题 在java中堆和栈也是用来存储数据,其中栈存储的引用,堆存储的对象 如:student s = new student("张三"); s在栈中 张三在堆

通化县18558768461: 请简单通俗易懂的解释一下在Java中什么叫堆 什么叫栈 谢谢 -
丁夜冠沙: 堆:也叫动态内存,相当于一个内存池子,在java中创建对象的时候,就从堆里面拿出一块来存放对象;当GC(垃圾回收)回收对象的时候,又把对象占用的内容还给堆.举个例子:堆就好比一个面团,类就好比一个馒头印子,用印子从面团中...

通化县18558768461: java 堆栈的概念
丁夜冠沙: 有 new 出来的东西都是放在堆区方法 里面的临时变量什么乱七八糟的东西 都是放在栈区 用完之后会马上回收 栈区的空间较小 但速度快

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网