Java编程思想之数据存储(一)

数据到底存储在什么地方?

程序运行的时候,对象是怎么进行有效地放置的呢?尤其是我们关心的内存是如何分配的?一般来说,数据会存放在以下五个地点。

1. 寄存器

这是最快的存储区,没有之一。因为寄存器位于CPU内部。CPU是直接执行指令的地方,寄存器距离它最近,因此速度最快。但是寄存器的大小就比较可怜了,所以一般寄存器的大小都是根据需要进行分配。我们不能直接控制寄存器的内存分配,甚至根本感觉不到它的存在。

2. 堆栈

堆栈的概念不同于后面的“堆”。堆栈位于通用RAM(随机访问存储器)中,但是通过堆栈指针可以从处理器那里获得直接支持。若堆栈指针向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速有效的存储方法,仅次于寄存器。创建程序时,Java系统必须知道存储在堆栈中的所有项的确切生命周期,以便于上下移动堆栈指针。但是这个却限制了程序的灵活性。所以Java里面我们可以看到,虽然像对象引用这种数据存放在堆栈中,但是对象却存放在堆中。

3. 堆

也是一种通用的内存池,也位于RAM中。使用堆比堆栈的灵活性要高不少。编译器不需要知道堆中的对象需要存活多长的时间。需要一个对象的时候只需要使用一条简单的new语句就行了,当程序执行这段代码的时候,便会自动进行内存的分配。但是使用堆也会有一些弊端,就是灵活性是以牺牲了对应的对象创建和销毁的速度为代价的。

4. 常量存储

常量值直接放在程序代码内部。这样做是安全的,因为它们永远不会被改变。

5. 非RAM存储

这里说的非RAM存储其实指的就是数据的持久化问题。通过将数据持久化为文件的形式保存在磁盘上。它们不收任何程序的限制,只要你能够读取并识别出这些数据,无论是在哪台服务器,在哪个操作系统,Fine!Java的序列化就是一个典型的对象持久化的例子。它可以直接将对象以文件的形式保存下来,并且在需要的时候恢复。

分享到