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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yin1031468524 中级黑马   /  2013-6-3 21:40  /  1502 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于java变量存储分为几个区,分别存储一些什么变量?有点小疑惑,求大神指教、、、

评分

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

查看全部评分

4 个回复

倒序浏览
Java内存主要分成以下几块:
1.堆heap【new出来的空间和数组空间,存放对象、数组,数据不能共享】
2.本地方法栈native method stack【操作系统的本地方法所需要的空间,存放局部变量、引用】

3.方法区method area【所有对象数据共享区域,存储静态变量和普通方法、静态方法、常量、字符串常量(严格说存放在常量池,堆和栈都有)等类信息】

4.程序寄存器program counter register【速度最快且空间最小的一块区域,由编译器分配,我们对此没有直接的控制权】

注:方法区是一个独立区域,既不属于堆,也不属于栈,在类加载的时候只运行一次。
其实栈stack分为JVM stack(动态链接、方法出口)和native method stack。


希望对楼主有所帮助!

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 闫月乐 于 2013-6-3 22:10 编辑

我们常用的有
栈内存:局部变量,函数在栈中运行,运行后,内存立刻释放,变量手动赋值
堆内存:全局变量,new建立的对象,有默认值 ,当实体不再被使用的时候,会在jvm空闲的时候,
                    通过java垃圾回收机制使其自动释放
方法区:所有的静态成员(静态变量和静态方法包括主函数),所有的成员函数(方法),常量(包括字符串)。
现场画一个图吧!我学到的目前只有这些,错误的请指出,不全的请填补!希望能对你有帮助

内存图.JPG (53.35 KB, 下载次数: 0)

内存图.JPG

评分

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

查看全部评分

回复 使用道具 举报
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
3. 堆:存放所有new出来的对象。
4. 静态域:存放静态成员(static定义的)
5. 常量池:存放字符串常量和基本类型常量(public static final)。
希望楼主明白。。。

评分

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

查看全部评分

回复 使用道具 举报
先要弄清楚变量属于什么类型,才能知道存储在什么区域里。
一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。
局部变量的数据存在于栈内存中。
静态成员变量存在于方法区中。

评分

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

查看全部评分

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