黑马程序员技术交流社区

标题: java中成员变量在内存哪个位置存在? [打印本页]

作者: Java黑马    时间: 2014-8-30 14:31
标题: java中成员变量在内存哪个位置存在?
在网上搜,什么答案都有,都蒙圈了
作者: 【灰太狼】    时间: 2014-8-30 17:17
我就想到哪说哪把
在方法外的全局变量(也可以叫成员变量)是随着类的加载而加载的,存在堆中。
只要是new出来的,都存在堆中。
在方法中的临时变量(局部变量),都是存在栈中,
常量,存在常量池。
调用方法,方法都是进栈,
String类型属于常量,null属于常量,
都是即兴想出来的,有问题大家指正,不足大家补充
作者: careit    时间: 2014-8-30 21:34
首先java中内存主要包含4块:
1:heap (堆内存)
2:stack(栈内存)
3:data segment(静态变量或是常量存放区)
4:codesegment(方法区).
1:堆内存中存放的是new出的对象,new出的对象只包含成员变量。
2:栈内存中:存放的是局部成员变量。对于基本的数据类型存放的是基本变量的值,而对于对象变量,存放的是堆内存的地址。
3:静态、常量区:存放的是静态变量(类变量)或是常量。
4:方法区:存放的是对象的方法。因此即使new出多个对象也是只是存在一个方法。

因此成员变量要分静态和非静态来区分
作者: Java黑马    时间: 2014-8-31 15:04
【灰太狼】 发表于 2014-8-30 17:17
我就想到哪说哪把
在方法外的全局变量(也可以叫成员变量)是随着类的加载而加载的,存在堆中。
只要是new ...

学习了:P
作者: Java黑马    时间: 2014-8-31 15:05
careit 发表于 2014-8-30 21:34
首先java中内存主要包含4块:
1:heap (堆内存)
2:stack(栈内存)

谢谢,学习了
作者: 单线程xia    时间: 2014-8-31 16:21
对象的非静态成员变量在堆中。静态成员在静态区(或者叫方法区)




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