黑马程序员技术交流社区

标题: Java虚拟机的堆、栈、堆栈如何去理解? [打印本页]

作者: 张弗睿    时间: 2016-9-12 21:01
标题: Java虚拟机的堆、栈、堆栈如何去理解?
我只片面的知道堆和堆栈是一种存储结构,栈是一种数据结构
作者: 冷冷冷白    时间: 2016-9-12 21:10
敲碗等回复
作者: zwy1174    时间: 2016-9-12 21:40
等待大神中。。。
作者: 奋斗41280    时间: 2016-9-12 23:36
这是我之前在网上看到的,希望对你有帮助.如果有大神有更好的理解,也希望能回复下.


程序的局部变量存在于(栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中

这样说比较准确,所谓的栈其实是由寄存器ebp和esp指向的一片内存空间(ebp指向栈底,esp指向栈顶),原则上是由高地址向低地址生长的一片空间,会保存一些临时的数据,比如一个函数中的临时变量以及返回地址,数据的出入是先进后出,后进先出.

全局变量实际上是存在一个(一般来说正常的编译器)可读可写的内存空间,这个空间是在你写程序编译好的空间地址(由编译器决定),是固定的.

堆是由操作系统管理的一片空间,事先是没有在进程空间里分配的(比如你在没有分配堆的时候就访问堆空间会报一个内存访问错误),一般是由程序动态的分配出来,一旦分配了以后,一般需要程序去释放自己的堆空间.
作者: wo1026756529    时间: 2016-9-13 00:00
我是这么理解的,当是三国时期的魏蜀吴,栈堆方法区,蜀吴联盟了所以代表栈和堆,魏就当是方法区,内存就看你往哪跑
作者: 张弗睿    时间: 2016-10-16 21:35
奋斗41280 发表于 2016-9-12 23:36
这是我之前在网上看到的,希望对你有帮助.如果有大神有更好的理解,也希望能回复下.

非常感谢,了解
作者: 张弗睿    时间: 2016-10-16 21:37
wo1026756529 发表于 2016-9-13 00:00
我是这么理解的,当是三国时期的魏蜀吴,栈堆方法区,蜀吴联盟了所以代表栈和堆,魏就当是方法区,内存就看你往 ...

哈哈O(∩_∩)O~厉害了word哥
作者: wangkai426    时间: 2016-10-16 22:01
楼上说的很准确:程序的局部变量存在于(栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2