程序运行时,对数据保存到哪儿要心中有数。
有6个地方可以保存数据:
1.寄存器
寄存器是CPU内的组成部分。
由于寄存器位于和其他所有保存方式不同的地方,所以他是最快的保存区域。
寄存器的数量十分有限,所以他是根据需要由编译器来分配的,所以我们没啥控制权,也不可能在程序中找到他的踪迹。
2.堆栈
(驻留于内存区域)
RAM ( random access memory )随机存取存储器。
是与CPU直接交换数据的内部存储器,也叫主存,内存。
读写速度快,常作为操作系统和程序的临时数据存储媒介。
可以通过堆栈指针来处理。
指针向下移,创建新的内存。指针向上移,释放旧的内存。
速度仅次于寄存器。
创建时,Java编译器必须准确的知道堆栈内保存数据的长度和存在的时间,这影响了程序的灵活性。
所以java对象不存在这,但是有些java数据,特别是对象句柄,要存在这里面。
3.堆(Heap)
也叫内存堆
一种常规用途的内存池,也在RAM区域,其中保存了java对象。
与堆栈不同,堆最吸引人的地方在于,编译器不必知道要从堆里分配多少内存,也不必知道存储的数据要在堆里存在多长时间。
灵活性大。适合new对象。
在堆中分配空间需要花时间。
4.静态存储
static
位于固定位置,也在RAM里
程序运行期间,静态存储的数据将随时等候调用
可以用static关键字之处一个对象的特定元素是静态的。
但是java对象本身永远都不会置入静态存储空间。
5.常数存储
常数一般直接置于程序代码内部。
这样做安全,因为永远不会变。
有的需要严格的保护,可以将他们当道只读存储器ROM中。
6.非RAM存储
完全独立于一个程序之外 -- 程序不运行的时候任然存在,并且在程序的控制范围之外。
比如:
流式对象 -- 字节流
固定对象 -- 保存在磁盘中
特点:能存在于其他媒体中。一旦需要,可以将他们恢复成普通的、基于RAM的对象