首页 > 代码库 > Thinking in Java--对象存储位置

Thinking in Java--对象存储位置

1、寄存器

这是最快的存储区,因为它位于处理器的内部。但是由于寄存器的大小数量都是有限的,所以寄存器是由编译器根据需求进行分配。你不能直接控制,也不能感觉到寄存器的存在。


2、堆栈

位于通用RAM(随机访问存储器)中,但是通过“堆栈指针”可以从处理器那里获得直接的支持。通过堆栈指针的上下移动来为程序分配需要的空间,它的速度仅仅次于寄存器的速度。创建程序的时候,Java编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,一边上下移动指针。这样的一种限制很大程度上限制了程序的灵活性。所以Java虽然某些数据存储在堆栈中(对象引用),但是实际的Java对象并不存储在堆栈中,而是存储在堆中。


3、堆

位于RAM,由于存储Java对象。堆不同于堆栈的好处在于:编译器不需要知道程序数据所需要的空间的大小和生命周期。所以可以直接new出对象,在执行的时候会自动的在堆里面自动分配内存。这样程序相对来说,就变得灵活了一些。但是问题来了,用堆进行内存分配比用堆栈进行存储分配需要更多的时间(这也是大家都说Java慢的原因之一吧)。


4、静态存储

位于RAM了,对应于Java中static关键字标识的某个对象的特定元素。静态是指:在固定的位置


5、常量存储

常量值通常直接存放在程序代码内部。


6、非RAM存储

如果数据存在于程序之外,它可以不受程序的任何控制,在程序没有运行的时候也可以存在,对应Java中的“流对象”和“持久化对象”。


Thinking in Java--对象存储位置