Java程序运行时数据存储位置
- 寄存器: 这是最快的存储区, 但是寄存器的数量极其有限, 所以寄存器根据需求进行分配, 而且不能直接控制.
- 堆栈: 位于通用的RAM(随机访问存储器), Java系统必须知道存储在堆栈内所有项的确切生命周期, 以便上下移动堆栈指针. 这一约束限制了程序的灵活性,所以虽然某些Java数据存储于堆栈中, 基本数据类型的变量数据也存储于这里, 特别是对象的引用, 但是Java对象并不存储于其中.数组的引用保存在栈中,同时实例的时候在堆中开辟连续空间,栈中的空间指向堆的首地址. 栈有一个很重要的特殊性,就是存在栈中的数据可以共享.
- 堆: 一种通用的内存池(也位于RAM区), 用于存放所有的Java对象. 堆不同于堆栈的好处是编译器不需要知道存储的数据在堆里存活多久.
- 方法区: 所有对象数据共享区域,存储静态变量和普通方法、静态方法、常量、字符串常量(严格说存放在常量池,堆和栈都有).
- 非RAM存储: 如果数据完全存活于程序之外, 那么它可以不受程序的任何控制. 其中两个基本的盒子是流对象和持久化对象. 这种存储方式的技巧在于把对象转化成可以存放在其它媒介上, 在需要时可恢复成常规的, 基于RAM的对象. Java提供了对轻量级持久化的支持, 如JDBC和Hibernate.