转自:
下文笔者讲述数据存放位置的方法分享,如下所示
1.寄存器
寄存器是速度最快的数据存储方式,数据直接保存在中央处理器,然而寄存器的数量是有限的,所以只能按需分配。
JVM中有4种常见的寄存器
1.pc程序寄存器
2.optop操作数栈顶指针
3.frame当前执行环境指针
4.vars指向当前执行环境中第一个局部变量的指针
所有寄存器都为32位
----------------------------------------------------------
pc用于记录程序的执行
optop,frame和vars用于记录指向Java栈区的指针
2.堆与栈
2.1 堆内存用于存放new创建的对象 在堆中分配的内存,由JVM自动垃圾回收器管理 在堆中产生一个对象后,会在栈中定义一个特殊变量 这个变量的取值等于数组或对象在堆内存中的首地址 在栈中的这个特殊的变量就编程了数组或者对象的引用变量 以后就可以在程序中使用栈内存中的引用变量来访问堆中的对象 对象在没有引用变量指向它的时候,才会编程垃圾,不能再被使用 但是仍然占着内存,在随后一个不确定的时间点被垃圾回收器释放掉 这也是Java程序比较占内存的主要原因 实际上,栈中的变量指向堆内存中的变量,这就是Java中的指针。 2.2 在函数中定义的一些基本类型的变量和对象的引用变量都是在栈内存中分配的 当一段代码定义一个变量时,java就在栈中分配一个内存,当超过变量的作用域后,java会自动释放掉该变量分配的内存空间 简而言之,堆是用来存放对象的,栈是运行程序的 堆:为成员分配和释放,由程序员自己申请、自己释放。否则发生内存泄露。典型为使用 new 申请的堆内容 栈为编译器自动分配和释放,如函数参数、局部变量、临时变量等等 当把对象设置为null后,对象就可以被回收
3.常量存储
常量写在代码中,不可变
4.非RAM存储
不对应用数据进行保存,而将数据对象序列化, 然后转换为字节流并发送到其他机器的对象