专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java高级课程之Java堆内存和栈内存的区别

Java高级课程之Java堆内存和栈内存的区别

更新时间:2020-07-03 15:02:00 来源:动力节点 浏览1839次

堆栈,这个名词很多Java开发者在一开始学习Java的时候就经常听说了。

对于这个名词来说,它描述的其实是JVM的内存模型,

如果面试中问到,堆栈具体对应着什么,不知道是否了解?

堆和栈

其实堆栈是两个东西,在JVM中分别对应两个不同的内存部分。

对于JVM内存模型来说,只要记住下面这张图就足够了,

Java高级课程之Java堆内存和栈内存的区别

对于左边黄色的部分,就是JVM中的“堆”,相对应的右边的则是"栈"。

在Java中,Heap用来表示堆。我们不作深入的研究,毕竟JVM是个庞大复杂的东西,

这里只基本介绍JVM的基础知识部分。

比如Heap是用来干啥的?

提示一下,平时经常实例化对象吧?

Student student=new Student();

这里实例化了的对象,就是存放在堆中。

具体的说,是存放在Heap Memory中。

还有,静态变量也是在这里,还记得上面那张图嘛,黄色部分分了上下两个区,

其中一个叫Method Area的区域,是用来存放静态变量的。

你应该知道大名鼎鼎的爆栈吧,StackOverFlow,

这个网站可能解决了平时我们开发中遇到的90%的问题。

其实stack over flow本身是一种异常,这里的stack说的就是JVM里的栈。

而栈是用来干什么的呢,

举个例子,平时我们写的非静态方法,执行时就在栈里。

虽然这么说不够准确,因为要说明白方法的执行,需要了解栈帧的概念,但我们这里不作深入的分析。

现在不知道你是否明白,之前见过的stack over flow异常是怎么回事。

如果足够好奇的话,

可以尝试写一个递归方法,

public boolean recursive(){....return recursive();}

然后尝试让这个递归无限的嵌套下去,

你就会看到StackOverFlowException了,

原因就是因为stack内存不足以运行方法。

总结

所以总的来说,JVM分为Head和Stack两个部分

对于初学者,只要初步了解了这个基础,基本能应付开发中遇到的问题。

但如果想要提高自己,最终都需要深入了解JVM的内存模型。

Java高级课程之Java堆内存和栈内存的区别

以上就是动力节点java培训机构的小编针对“Java高级课程之Java堆内存和栈内存的区别”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>