程序运行时,对象是如何安放的?内存又是如何分配的?
- 有五个地方可以存储数据
寄存器
这是最快的存储区,因为它位于处理器内部。但存储器的数量极其有限,并且不被外部所控制和感知。
堆栈
位于通用RAM(随机访问存储器)
,通过堆栈指针操作内存,这同样是一个很快的存储区,仅次于寄存器存储区。创建程序时,java系统必须知道存储在堆栈内所有项的确切生命周期,对象的引用就存储在此,然而java
对象并不存储于此。
堆
一种通用的内存池(也位于RAM),用于存储所有的java
对象。堆不同于栈的好处是:编译器不需要知道对象的生命周期,因此在堆里分配存储有很大灵活性,当然,为这种灵活性必须要付出相应的代价,用堆进行存储分配和清理可能比用栈进行存储分配花费更多的时间。
常量存储
常量值通常直接存储在程序代码内部,这样做是安全的,因为他们永远不会被改变。
非RAM存储
也就是硬盘,流对象和持久化对象存在于此。