A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangxin540 中级黑马   /  2013-9-27 11:06  /  1877 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yangxin540 于 2013-9-27 23:52 编辑

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

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

7 个回复

倒序浏览
存储在栈中
对于引用类型的变量,变量名还是存储在栈中,但是引用的对象存储在堆中。

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

回复 使用道具 举报
虚拟机内存分为4个区:stack 、heap 、data、 code
stack  区: 存放函数参数和局部变量
heap  区: 存放对象
data   区: 存放static的变量或者字符串常量
code  区:  存放类中的方法

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

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
个人认为是在栈中,全局变量只是一个作用全局的变量,作用域在全局,它不是常量也不是对象,所以在栈里
回复 使用道具 举报
黄绍楷 发表于 2013-9-27 12:20
虚拟机内存分为4个区:stack 、heap 、data、 code
stack  区: 存放函数参数和局部变量
heap  区: 存放对 ...

恩,哥们,我觉得你分析是正确的
回复 使用道具 举报
xh396660787 发表于 2013-9-27 13:52
lz,我刚刚又找到一篇博客说全局变量是放在静态区的。你看看有没有帮助吧http://blog.sina.com.cn/s/blog_5 ...

哥们,博客里面说c/c++是存在静态区的呀,java不应该存在静态区吧,就像单例设计模式就是全局变量指向了对象,如果存在静态区的话,也就先于对象加载,就不能成功呀!
回复 使用道具 举报
晨曦 发表于 2013-9-27 11:12
存储在栈中
对于引用类型的变量,变量名还是存储在栈中,但是引用的对象存储在堆中。 ...

哥们,全局变量呀,不是引用性变量吧
回复 使用道具 举报
晨曦 中级黑马 2013-9-27 18:44:52
8#
yangxin540 发表于 2013-9-27 14:21
哥们,全局变量呀,不是引用性变量吧

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