您的同行都在使用奇网校

Online Service

在JAVA语言中堆和栈的区别

发布时间:2018-02-23 14:25:49

在刚开始学习JAVA基础知识的时候,不可避免地会遇到堆和栈。堆栈的知识在JAVA语言中是一个重难点知识,如果在一开始不能很好地理解堆和栈,分清楚它们之间的区别和,很可能遇到更加令人费解的问题。实际上,堆和栈都是内存的一部分,有不同的作用,而且都能够为程序分配内存。


作为一名合格的IT技术人员,JAVA中堆和栈的知识也是面试中经常出现的问题,所以我们要搞清楚堆和栈之间的区别。堆和栈更主要的区别就是,堆是用来存储JAVA中的对象,而栈内存是用来存储局部变量和方法调用的。在对象中,无论是全局变量还是局部变量,它们对指向的对象都存储在堆内存中。所以说堆和栈有各自不同的作用的责任。


对于它们是独有还是共享也有不同的解释。栈内存是归属于单个线程的,每个线程都会被分配一个栈内存,其中占内存中存储的变量只有该线程能够使用,可以理解为栈内存是线程的私有内存。而堆内存的对象对所有的线程都可见,堆内存中的对象可以被所有线程访问。在发生异常错误时,堆和栈会分别抛出不同的错误提示。


在JAVA基础知识中,我们要知道,栈的内存要远远小于堆的内存,如果要使用递归,一般都很少用堆内存,选择栈内存。栈和堆的数据结构也不尽相同,堆一般是被看成一颗树,以树的数据结构来解答,例如我们经常接触的堆排序;而栈是一种先进后出的数据结构,有它自己所使用的数据包。


不管如何说,堆和栈都是JAVA用来在内存中存放数据的地方,而且JAVA会自动管理堆和栈,堆可以动态地分配内存大小,但是存取速度会随着这个逐渐变慢。栈则是存取速度较快,但是其数据大小和生存周期是必须确定的。综上都是关于栈和堆理论区别的JAVA基础知识,真正去理解它们之间的不同还是需要我们在编写程序的时候发现,这样我们才能知道什么数据存储用什么样的方式,从而达到代码简练,内存空间有效利用的目的。






温馨提示:未经报名哥明确许可,任何网站不得非法盗链及抄袭本站资源;如您引用报名哥页面或资源,请注明来源于报名哥,谢谢合作!