黑马程序员技术交流社区
标题:
变量存储
[打印本页]
作者:
yin1031468524
时间:
2013-6-3 21:40
标题:
变量存储
关于java变量存储分为几个区,分别存储一些什么变量?有点小疑惑,求大神指教、、、
作者:
胡晓思
时间:
2013-6-3 21:48
Java内存主要分成以下几块:
1.堆heap【new出来的空间和数组空间,存放对象、数组,数据不能共享】
2.本地方法栈native method stack【操作系统的本地方法所需要的空间,存放局部变量、引用】
3.方法区method area【所有对象数据共享区域,存储静态变量和普通方法、静态方法、常量、字符串常量(严格说存放在常量池,堆和栈都有)等类信息】
4.程序寄存器program counter register【速度最快且空间最小的一块区域,由编译器分配,我们对此没有直接的控制权】
注:方法区是一个独立区域,既不属于堆,也不属于栈,在类加载的时候只运行一次。
其实栈stack分为JVM stack(动态链接、方法出口)和native method stack。
希望对楼主有所帮助!
作者:
闫月乐
时间:
2013-6-3 21:59
本帖最后由 闫月乐 于 2013-6-3 22:10 编辑
我们常用的有
栈内存:局部变量,函数在栈中运行,运行后,内存立刻释放,变量手动赋值
堆内存:全局变量,new建立的对象,有默认值 ,当实体不再被使用的时候,会在jvm空闲的时候,
通过java垃圾回收机制使其自动释放
方法区:所有的静态成员(静态变量和静态方法包括主函数),所有的成员函数(方法),常量(包括字符串)。
现场画一个图吧!我学到的目前只有这些,错误的请指出,不全的请填补!希望能对你有帮助
内存图.JPG
(53.35 KB, 下载次数: 0)
下载附件
2013-6-3 21:59 上传
作者:
刘晓
时间:
2013-6-3 22:00
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
3. 堆:存放所有new出来的对象。
4. 静态域:存放静态成员(static定义的)
5. 常量池:存放字符串常量和基本类型常量(public static final)。
希望楼主明白。。。
作者:
郑锐
时间:
2013-6-3 22:11
先要弄清楚变量属于什么类型,才能知道存储在什么区域里。
一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。
局部变量的数据存在于栈内存中。
静态成员变量存在于方法区中。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2