java内存区域--运行时数据区域
来源:互联网 发布:知乎的神回答 编辑:程序博客网 时间:2024/04/28 01:46
、
方法区:存储类信息(类的名称、类的全限命名、类的类型),类变量(静态变量),编译之后的字节码指令(方法)。
堆:存储对象实例。
虚拟机栈:包含局部变量表(方法参数、局部变量),操作数栈,动态链接,方法返回地址。
本地方法栈:为虚拟机使用的native方法服务。
程序计数器:记录虚拟机字节码指令地址(当前线程所执行的字节码的行号指示器)。
案例一:方法调用执行过程
public static void main(String[] args) { getSize(10); } private static int getSize(int tt) { CreditCardStore store = new CreditCardStore(); int size = store.getTransInfoList().size(); return tt + size; }
main方法执行getSize(10)方法时,虚拟机栈中:第一步,方法参数tt=10放入局部变量表中。第二步,程序计数器执行从方法区获取的第一条字节码指令(new一个实例对象),将实例对象存放在堆中,将引用存放在动态链接中。第三步,程序计数器执行第二条字节码指令getTransInfoList()方法。第四步,程序计数器执行size()方法。第五步,将size的值放入局部变量表中。第六步,程序计数器从局部变量表中获取的size和参数tt执行字节码指令,压入操作数栈。第七步,执行字节码指令相加操作。第八步,执行字节码返回指令,返回到上一个方法执行状态。
案例二:类的说明
/** * @note 类的加载时:类加载到方法区 */class Ba { /** * @note 类的准备时:类变量加载到方法区添加默认值 */ public static String NEW_YEAR_BEGIN = "2016-02-03 23:59:59"; /** * @note new实例时:实例变量跟随实例加载到堆, * @note 实例变量之前存储在方法区的运行时常量池(存放编译期生成的各种字面量和符号引用) */ public int years = 1; private int yearsTwo; /** * @note 类的加载时:普通方法、静态方法分配到方法区 * @note 方法指令 * aload_0 :将第一个引用类型本地变量推入栈顶 * getfield :获取实例的属性值 * iconst_1 :将int=1推至栈顶 * iadd :将int类型+1 * ireturn :将int类型返回 */ public int test1() { return yearsTwo + 1; }}
0 0
- JAVA 内存区域---运行时数据区域
- java内存区域--运行时数据区域
- Java内存区域(运行时数据区域)
- java JVM的内存区域(运行时数据区域)
- Java内存区域——运行时数据区域
- java JVM的内存区域(运行时数据区域)
- java JVM的内存区域(运行时数据区域)
- java JVM的内存区域(运行时数据区域)
- Java运行时内存数据区域分布
- java内存结构(运行时数据区域)
- Java运行时内存数据区域分布
- java虚拟机 内存运行时数据区域
- java内存区域-运行时数据区
- java内存结构(运行时数据区域)
- Java运行时内存区域
- Java运行时内存区域
- java运行时数据区域
- Java运行时数据区域
- jks 秘钥加解密
- Android热修复之AndFix.android studio
- 给定一个日期,用mysql得到该日期所对应的星期一所对应的日期和星期天所对应的日期。
- 【机器学习基础】生成模型和判别模型
- 网络字节序与主机字节序
- java内存区域--运行时数据区域
- 解决:keil报错invalid redeclaration of type name "s32"
- select2 及tree用法,直接代码
- linux下的signal()函数
- 【机器学习基础】机器学习基础引入
- bootstrap-datetimepicker 时间选择
- 2016 知识点汇总 mindmap
- .Net 中的反射(查看基本类型信息)
- 高效程序员的10个习惯