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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 欧阳文愿 于 2011-11-23 16:05 编辑

假如声明一个对象,成员变量和静态变量是存在内存那里?变量没有初始化是不是没有分配内存的意思?堆内存和栈内存是主要分别存什么的?声明基本类型变量和引用类型变量,在初始化时内存如何分配?求高手解答

评分

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

查看全部评分

3 个回复

倒序浏览
内存总体分为了4个部分,包括 stack segment  、heap segment、code segment 、data segment ;
    其中我们程序中用关键字new出来的东西都是存放在heap segment;
    程序中的局部变量存放在stack segment,这些局部变量是在具体方法执行结束之后,系统自动释放内存资源(而heap segment中的资源需要java垃圾回收机制来处理);
static静态变量,需要放在内存中的data segment中,

classA a;
若classA是引用类型(String、继承自object,实现接口)那么不会分配空间,空间在new之后分配
若是值类型(基元类型、结构、枚举)就会分配空间
栈是存放函数调用过程中的临时变量的 堆是程序运行过程中动态申请的内存的存放处的比如new的对象就在堆上
所有局部变量都是放在栈内存里保存的,不管其是基本类型的变量,还是引用类型的变量,都是存储在格子的方法栈区中;但引用类型变量所引用的对象(包括数组,普通java对象)则总是存储在堆内存中。
希望能帮到你

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
还是没明白,stack segment 这个是堆内存?
heap segment 这个是栈内存吗?
回复 使用道具 举报
欧阳文愿 发表于 2011-11-3 09:30
还是没明白,stack segment 这个是堆内存?
heap segment 这个是栈内存吗?

你恰好反了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马