程序运行时,对象是怎么分配内存空间的?

 有五个地方可以存储数据:

  1. 寄存器:寄存器位于处理器内部,所以是最快的存储区。但是寄存器的数量极其有限,所以寄存器根据需求进行分配。不能直接控制。
  2. 堆栈:位于RAM(随机访问存储器)中,可通多堆栈指针从处理器哪里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动。则释放那些内存。这是一种快速分配内存的方法,仅次于寄存器。java系统必须知道存储在堆栈内所有项的确切生命周期,以便于上下移动堆栈指针。(变量)
  3. :也位于RAM中,一种通用的内存池,用于存放java对象。堆不同于堆栈。编译器不需要知道存储的数据在堆里需要存活多长时间。(对象)
  4. 常量存储:常量值通常直接存放在程序代码内部,在ROM(只读存储器中) 就是字符串池,特殊的静态存储区。
  5. 非RAM存储:如果数据完全存活于程序之外,不受程序控制,在程序中没有运行时也可以存在。例如:流对象和持久化对象。在流对象中,对象转化为字节流,通常被发送给另一台机器,在持久化对象中,对象被存放于磁盘上。