程序运行时的对象存储在哪里?内存又是如何分配的呢?有六个地方:
寄存器(Register)——数量少但是最快的存储区(在CPU内)
用于存储Java程序运算过程的变量,由Java编译器根据运行时需求分配。
堆栈(Stack)——速度仅次寄存器(在RAM(随机访问存储器)内)
用于快速分配内存,特别是“对象引用”。创建程序时,Java编译器需要知道存储在堆栈里的所有数据的确切大小和存活时间,因为会生成相应的代码,以便上下移动堆栈指针。
堆(Heap)——通用性的内存池(在RAM内)
用于存储Java的所有对象(每new()一个对象,就会在堆中分配一个对象的存储空间。),比堆栈更具灵活性。因为编译器不需要知道要从堆中分配多少空间,也不必需要知道数据在堆中的存活时间。自然,这种灵活性是要付出时间上的代价。
静态存储(Static Storage)——某“固定的”存储空间(在RAM内)
用于存储static的Java数据,但是注意static的Java对象仍存储在堆中,只不过在静态存储空间,会用static标识其中特定的元素。
常量存储(Constant Storage)——某“固定的”存储空间(有时在某些嵌入式系统中,在ROM(只读存储器)内)
用于分离常量和变量。
非RAM存储(no-RAM Storage)——程序外的数据存储(磁盘或者机器间的数据流)
例如“流对象”和“可持续化对象”。
|
|