数据储存在哪儿
有6个存储数据的地方
注册表(Register):
a) 最快的储存,直接存储在处理器中。
b) 虽然数据表的数量及其有限,但注册表也是按需分配。
c) 不能直接操作注册表,在系统中也看不见注册表存在的痕迹。
堆栈(stack):
a) 活动于常规RAM(随机访问存储器random-access memory)区域,但能通过堆栈指针获得处理器的直接支持。
b) 速度和效率仅次于注册表。
c) Java系统在创建系统的时候必须知道所有存储在堆栈中的数据的生命周期。
d) 堆栈限制了程序的灵活性,所有有些Java数据,特别是句柄存放在堆栈中,而Java对象是不放在堆栈中的。
堆(heap):
a) 一个常规用途的内存池(也在RAM区域),所有Java对象都存储在这儿。
b) 堆不像堆栈,编译器不需要知道数据要在堆中储存多长时间。因而在堆中使用数据有很大的灵活性。
c) 需要对象时,只需要使用new创建一个。执行代码时,堆中的数据会自动存储数据。
d) 但灵活性的代价是堆中存储和清除数据需要比在堆栈中花更多的时间。
常量存储(constant storage):
a) 常量值常常直接放在程序代码中。因为常量值不会改变所以安全。
b) 有时常数需要严格保护,所以可以将其置入只读存储器(ROM read-only memory)中
非RAM存储(Non-RAM storage):
a) 如果数据独立于程序之外,则在程序没有运行的时候也能存在,且不在程序的控制之中。
b) 两个主要的例子是
i. 流式对象(streamed objects)对象变为字节流,
ii. 另一种是固定对象(persistent object),对象存储在磁盘上,即便程序终止也能保持自己的状态不变。
c) 有一个技巧是将此类数据变成可以存储在其他媒体上,需要时直接恢复成常规的基于RAM的对象。
d) java为轻量固定(lightweight persistence)支持,为如JDBC和Hibernate的机制在数据库中存储和读取数据提供更成熟的支持。
补充:静态存储(static):
a) 这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。
b) 程序运行期间,静态存储的数据将随时等候调用。
c) 可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远都不会置入静态存储空间。