程序运行时,对象的放置、内存的分配,主要涉及到五个不同的存储区域:
1)寄存器。这是所有存储区域中最快的,因为他位于处理器内部。
但是寄存器数量有限,所以寄存器一般是根据需求进行分配的。Java中程序员不能直接控制(但是,C和C++允许程序员向编译器建议寄存器的分配方式)。
2)堆栈。位于RAM-- Random- Access Memory(随机访问存储器)中。
堆栈指针若向下移动,则分配新内存;向下移动,则释放内存。创建程序时,Java系统必须知道所有在堆栈中存储对象的生命周期,这一约束限制了程序的灵活性。因此Java设计者没有将Java对象存储域其中,只是将基本变量和引用变量存放于此。
3)堆。一种通用的内存池(也位于RAM区),用于存放所有的Java对象。
4)常量存储。常量值通常存储于程序代码中,十分安全。在嵌入式系统中,常量本身对和其他部分隔离,被存放入ROM(只读存储器)中
5)非RAM存储。即数据存活于程序之外,不受程序控制。比如:流对象和持久化对象。在流对象中,对象转化成字节流,进行通信。在“持久化对象”中,对象呗存储于磁盘上。因此,Java提供了对轻量级持久化的支持。
总结:
堆中存放一切对象,栈中存放引用和基本变量 || 常量存储于代码 || 对象亦可被记录于其他媒介的事务上