一:说明
java运行期间所有内容都存储在电脑上,并在不同阶段,将不同代码由磁盘导入内存并执行。那么我们就有必要知道电脑的存储大体是怎么分配的,在程序运行到某个阶段,我们哪些内容是放在磁盘上的,哪些内容是加载在内存的哪个地方的。本文目前仅简单介绍内存的分类
二:存储的几个地方
1.寄存器:
寄存器是最快的存储区,他位于处理器内部,根据需求进行分配,java不能控制寄存器存储的分配方式
2.栈:
位于RAM中,通过堆栈指针从处理器那里获取直接有效的支持,效率仅次于寄存器。由于编译器需要知道知道栈内的所有项的确切生命周期以便于分配和释放内存,因此灵活性受限制,所以一般仅用于存放对象引用
3.堆:
位于RAM中,用于存放所有java对象,灵活性比较高。new创建的对象一般创建在堆中,当然存储分配和清理效率较栈低
4.常量:
一般存在于程序代码内部。在嵌入式系统中,因为常量会和其他部分分隔开,所以一般会选择存放在ROM中
5.非RAM存储:
完全存活于程序之外的数据如:持久化对象(磁盘)和流对象(字节流文件)。实际工作中一般用jdbc,hibernate,mybatis等完成持久化交互工作。
三:小结
java代码一般按需分批载入内存执行,持久化对象(数据库)中有部分对象(如游标)也会被分配在内存中执行。内存执行速度快于磁盘,但需要很好的控制内存使用避免内存泄漏。数据库数据存放在磁盘中,读写数据库慢于直接读写磁盘慢于内存读写