Thinking in Java--对象存储位置
1、寄存器
这是最快的存储区,因为它位于处理器的内部。但是由于寄存器的大小数量都是有限的,所以寄存器是由编译器根据需求进行分配。你不能直接控制,也不能感觉到寄存器的存在。
2、堆栈
位于通用RAM(随机访问存储器)中,但是通过“堆栈指针”可以从处理器那里获得直接的支持。通过堆栈指针的上下移动来为程序分配需要的空间,它的速度仅仅次于寄存器的速度。创建程序的时候,Java编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,一边上下移动指针。这样的一种限制很大程度上限制了程序的灵活性。所以Java虽然某些数据存储在堆栈中(对象引用),但是实际的Java对象并不存储在堆栈中,而是存储在堆中。
3、堆
位于RAM,由于存储Java对象。堆不同于堆栈的好处在于:编译器不需要知道程序数据所需要的空间的大小和生命周期。所以可以直接new出对象,在执行的时候会自动的在堆里面自动分配内存。这样程序相对来说,就变得灵活了一些。但是问题来了,用堆进行内存分配比用堆栈进行存储分配需要更多的时间(这也是大家都说Java慢的原因之一吧)。
4、静态存储
位于RAM了,对应于Java中static关键字标识的某个对象的特定元素。静态是指:在固定的位置
5、常量存储
常量值通常直接存放在程序代码内部。
6、非RAM存储
如果数据存在于程序之外,它可以不受程序的任何控制,在程序没有运行的时候也可以存在,对应Java中的“流对象”和“持久化对象”。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。