黑马程序员技术交流社区

标题: 小疑问一个 [打印本页]

作者: yangxin540    时间: 2013-9-27 11:06
标题: 小疑问一个
本帖最后由 yangxin540 于 2013-9-27 23:52 编辑

今天,想起内存分配的问题,突然感觉对全局变量存放在内存中的哪块有点疑惑,感觉是存在堆内存中,但是有点不确定,所以请明白的指点迷津!

作者: 晨曦    时间: 2013-9-27 11:12
存储在栈中
对于引用类型的变量,变量名还是存储在栈中,但是引用的对象存储在堆中。
作者: 黄绍楷    时间: 2013-9-27 12:20
虚拟机内存分为4个区:stack 、heap 、data、 code
stack  区: 存放函数参数和局部变量
heap  区: 存放对象
data   区: 存放static的变量或者字符串常量
code  区:  存放类中的方法

全局变量是就是这个类的对象都可以访问的属性,所以是存在堆内存中。


作者: 周志龙    时间: 2013-9-27 13:02
个人认为是在栈中,全局变量只是一个作用全局的变量,作用域在全局,它不是常量也不是对象,所以在栈里
作者: yangxin540    时间: 2013-9-27 13:24
黄绍楷 发表于 2013-9-27 12:20
虚拟机内存分为4个区:stack 、heap 、data、 code
stack  区: 存放函数参数和局部变量
heap  区: 存放对 ...

恩,哥们,我觉得你分析是正确的

作者: yangxin540    时间: 2013-9-27 14:19
xh396660787 发表于 2013-9-27 13:52
lz,我刚刚又找到一篇博客说全局变量是放在静态区的。你看看有没有帮助吧http://blog.sina.com.cn/s/blog_5 ...

哥们,博客里面说c/c++是存在静态区的呀,java不应该存在静态区吧,就像单例设计模式就是全局变量指向了对象,如果存在静态区的话,也就先于对象加载,就不能成功呀!

作者: yangxin540    时间: 2013-9-27 14:21
晨曦 发表于 2013-9-27 11:12
存储在栈中
对于引用类型的变量,变量名还是存储在栈中,但是引用的对象存储在堆中。 ...

哥们,全局变量呀,不是引用性变量吧
作者: 晨曦    时间: 2013-9-27 18:44
yangxin540 发表于 2013-9-27 14:21
哥们,全局变量呀,不是引用性变量吧

脑子短路了,确实是放在堆中的。我当做了局部变量
局部变量:放在栈中
全局变量:
                普通全局变量:放在堆中,如果有多个对象,每个对象都会有一个全局变量的复制,改变后互相不影响
                静态全局变量:也是放在堆中,并且只存在一个,所有对象是共享使用的。因此才可以用static int cout=0;      count++来计算对象的个数
引用型变量: 变量名放在栈中,并指向对象(对象存储在堆中)





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