Java内存结构
堆heap:运行时数据区,用于存储运行时产生的数据
运行时动态分配内存
自动回收垃圾
存取速度较慢
栈stack: 存储运行时正在执行的指令
存储执行的指令所用的数据,分为基本、引用
运行指令
存取速度快
所有栈共享堆
数据的大小和生命周期都确定,不够灵活
方法区Method Area: class字节码文件信息
方法内变量类型
预加载的数据
需要运行的程序代码
常量池 constant pool:用来存储某类型的常量信息
存储较小的数值
存储源文件的字面量
提高存储效率
本地方法栈 Nativemethodstack:保存调用本地方法的地址
寄存器Registers:程序计数寄存器
栈堆指针寄存器
框架寄存器
变量寄存器
常量池包含的内容:1.字面量:文本字符串
被final修饰的值
基本数据类型的值
其他
2.符号引用:类和结构的完全限定名
字段名称和描述等
方法名称和描述等
堆:程序运行时产生的数据,存储在堆中,堆空间只有一个,其它内存区域共用一个堆空间
栈:加载准备运行的算法
加载准备使用的数据
在寄存器辅助下让cpu运行算法
栈中保存变量引用,保存并运行算法 堆中存储的是变量的具体数据
方法区:字节码文件加载时,就将类的结构信息、方法的详细内容,静态数据储存到方法区。