程序运行时,我们需要知道数据到底是存在什么地方,有6个地方可以存储数据:
1、寄存器。最快的保存区域,位于处理器内部。寄存器的大小有限,由编译器的分配大小。
2、堆栈。驻留在常规RAM(随机访问存储器)区域,通过“堆栈指针”可以改变大小。堆栈指针向下移动,会创建新的内存空间;向上移动,则释放内存空间。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”和“存在的时间”,编译器由此生成相应的代码,以便移动指针。Java对象的句柄保存在其中,但是Java对象并不保存在堆栈中。
3、堆。常规用途的内存池,其中保存了Java对象。编译器不知道也不需要知道从“内存堆”或“堆”里分配多少存储空间、数据存留多长时间。
4、静态存储。静态指位于固定的位置(在RAM中)。程序运行期间,静态存储的数据将随时供调用。通过static关键字指出一个对象的特定元素是静态的。Java本身本不可能置于静态存储空间。
5、常数存储。常数值通常置于程序代码内部,永远不会改变。
6、非RAM存储。若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之内。例如,流式对象和固定对象。
网友评论