您的位置:

java栈,java栈和堆分别存放什么

本文目录一览:

JAVA中队列和栈的区别

队列(Queue):是限定只能在表的一端进行插入和在另一端进行删除操作的线性表;

栈(Stack):是限定只能在表的一端进行插入和删除操作的线性表。

区别如下:

一、规则不同

1. 队列:先进先出(First In First Out)FIFO

2. 栈:先进后出(First In Last Out )FILO

二、对插入和删除操作的限定不同

1. 队列:只能在表的一端进行插入,并在表的另一端进行删除;

2. 栈:只能在表的一端插入和删除。

三、遍历数据速度不同

1.

队列:基于地址指针进行遍历,而且可以从头部或者尾部进行遍历,但不能同时遍历,无需开辟空间,因为在遍历的过程中不影响数据结构,所以遍历速度要快;

2.

栈:只能从顶部取数据,也就是说最先进入栈底的,需要遍历整个栈才能取出来,而且在遍历数据的同时需要为数据开辟临时空间,保持数据在遍历前的一致性。

java中什么是栈啊?

栈是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西,而对于栈就只能每次访问它的栈顶元素,从而可以达到保护栈顶元素以下的其他元素.”先进后出”或”后进先出”就是栈的一大特点,先进栈的元素总是要等到后进栈的元素出栈以后才能出栈.递归就是利用到了系统栈,暂时保存临时结果,对临时结果进行保护.

对于栈的学习,建议你看一看<数据结构与算法>这本书.

请简单通俗易懂的解释一下在Java中什么叫堆 什么叫栈 谢谢

堆:也叫动态内存,相当于一个内存池子,在java中创建对象的时候,就从堆里面拿出一块来存放对象;当GC(垃圾回收)回收对象的时候,又把对象占用的内容还给堆。

举个例子:堆就好比一个面团,类就好比一个馒头印子,用印子从面团中取出一小块面团,印成馒头,这个馒头就是这个馒头印子类产生的对象了。当无限的创建馒头的时候,这个面团总会被用光的,这个时候就不能在创建新的馒头了。

所有GC就有存在的必要了,当对象不被持有的时候,GC就会把对象还给堆。也就是,当这个馒头没有被使用,这个馒头就变成小面团,还给面团。

栈:也是一段内存,但是这段内存比较有特点,遵循一个先进后出的规则。

举个例子:吃过罐装的薯片吧,薯片一片一片的放到罐里面去,想想,最先放进去的是不是放在罐的最底部。现在一片片把薯片取出来,是不是要从最顶部开始去,也就是最后放进去的,最先取出来。这个薯片放进去和取出来的这个过程,就是栈的工作原理啦(先进入的后出来,后进入的先出来)

在java中的栈:栈的原理明白了,其实只要是计算机只要是编程语言,什么堆什么栈都是一样的,基本作用也一样。java中可以认为,栈用来存放局部变量的。

public void fun(){

int i=0; //i 是一个局部变量,存放在栈里面的

Object obj = new Objec(); //obj 是一个对象应用,同样也是一个局部变量,存放在站里面的,但是obj指向的对象,在存在堆中

}

Java栈和本地方法栈方法调用栈,这些都是什么?

JAVA内存里面有一般有四个分类,堆,

栈(堆栈),

静态域,

常量池

栈:

实际上是一个队列,

遵循

FILO的原则(后进先出),

里面储存的是函数的参数值,局部变量,对象的引用(对象本身不在这里)等,因此在每调用一个函数时,堆栈都会分配一部分空间给它,函数返回时,被释放

堆:

储存静态变量,全局变量

用new创建的东西,栈中的内存是动态内存,其中的内存在不使用时随时可以被回收

静态域:存放对象中static定义的成员

常量池:存放常量

根据以上解释回答你的问题:

JAVA栈存的是函数的参数值,局部变量,对象的引用

方法调用栈?

没有这说法吧,

方法的调用是存在栈中的

本地方法栈,

和JAVA中的栈一个作用,

只是这个栈是属于本地的,不属于JAVA虚拟机,但受JAVA虚拟机的控制,因为是JAVA虚拟机简单地动态链接并直接调用指定的本地方法。可以把这看作是虚拟机利用本地方法来动态扩展自己

局部变量和对象引用存在

中,

方法调用的栈帧也是在

以上是我自己查资料+自己的理解,有错望指出