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

© Woo 中级黑马   /  2015-8-24 14:35  /  273 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Woo 于 2015-8-24 14:42 编辑

变量分为两种,一种是成员变量,一种是局部变量
成员变量:实例变量、类变量(以static修饰)
局部变量:形参、方法局部变量、代码块局部变量

程序运行的时候,对象是在哪里放置?在内存中如何分配?
1.寄存器(程序员无法直接控制,速度最快,在处理器内部)
2.栈(在RAM中,保存局部变量的值)
/*
包括:①保存基本数据类型的值;②保存引用变量,即堆区对象的引用(指针)。
也可以用来保存加载方法时的帧。
Thinking in Java中作者举了一个形象的例子,说引用就像是遥控器,而对象就像是电视机
*/
3.堆(内存池,在RAM中,用于存放所有Java的对象)
/*
用来存放动态产生的数据,比如new出来的对象。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。
*/
4.常量池
5.非RAM存储

在深入理解JVM中,作者给出了如下运行时数据区域的划分
1.程序计数器
2.JVM栈(存放局部变量表、操作栈、动态链接、方法出口信息)
局部变量表:基本数据类型、对象引用、returnAddress类型
3.本地方法栈(为JVM使用到的Native方法服务)
4.Java堆(存放对象实例、垃圾收集器管理的主要区域)
细分:Eden空间、From Survivor空间、To Survivor空间
5.方法区(用于存储已经被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码)
方法区中还有常量池(存放编译期生成的各种字面量和符号引用)


JVM结构.jpg (150.63 KB, 下载次数: 2)

JVM结构.jpg

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马