黑马程序员技术交流社区
标题:
关于程序对象声明的变量在内存怎么运行的
[打印本页]
作者:
欧阳文愿
时间:
2011-11-2 22:09
标题:
关于程序对象声明的变量在内存怎么运行的
本帖最后由 欧阳文愿 于 2011-11-23 16:05 编辑
假如声明一个对象,成员变量和静态变量是存在内存那里?变量没有初始化是不是没有分配内存的意思?堆内存和栈内存是主要分别存什么的?声明基本类型变量和引用类型变量,在初始化时内存如何分配?求高手解答
作者:
柴永菲
时间:
2011-11-3 08:38
内存总体分为了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对象)则总是存储在堆内存中。
希望能帮到你
作者:
欧阳文愿
时间:
2011-11-3 09:30
还是没明白,stack segment 这个是堆内存?
heap segment 这个是栈内存吗?
作者:
fso918
时间:
2011-11-3 09:35
欧阳文愿 发表于 2011-11-3 09:30
还是没明白,stack segment 这个是堆内存?
heap segment 这个是栈内存吗?
你恰好反了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2