java内存分配存储

来源:互联网 发布:c语言rand函数范围 编辑:程序博客网 时间:2024/06/05 04:05

转自

有6个地方可以作为存储机构:
1、寄存器(register):这是最快的存储区,因为它位于不同于其他存储区的地方——处理器的内部。但是存储器的数量是极其有限的,所以寄存器根据编译器的需求来分配。不能人为的控制,也不能在程序中感觉到寄存器存在的任何迹象。
2、堆栈(stack):通常位于RAM(random access memory随即访问存储器 )中,但是通过它的“堆栈指针”可以在处理器那里获得直接支持。堆栈指针若是向下移动,则分配新的内存;若是向上移动,则是释放那些那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,JAVA编译器需要知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以某些JAVA程序存储在堆栈中——特别是java对象的引用,但是java的对象并不存在其中。
3、堆(heap):一种通用性的内存池(也存在RAM区),用于存放所有的JAVA对象。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配空间有很大的灵活性。当你需要创建一个对象时,只需要用new写一行简单的代码,当执行这段代码时,将自动在堆里进行存储分配。当然,为这种灵活性必须付出相应的代价。用堆进行存储分配比用堆栈进行存储分配将要更多的时间。
4、静态存储(Static storage):这里的静态是指固定的位置(尽管也在RAM里)。静态存储里存放程序运行时一直存在的数据。可以使用static来标示一个对象的特定元素是静态的。但是,java对象本身是从来不会存储在静态的存储空间里。
5、常量存储(constant storage):常量值通常是直接存放在程序代码的内部,这样做是安全的,因为他们永远不会被改变。
6、非RAM存储(non RAM storage):如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。

0 0