Java程序运行时,数据的存储位置
java中有五个不同的地方用来存储数据:
1)寄存器:
这是存取数据最快的地方,寄存器的数量极其有限,不能对其直接控制。
2)堆栈:
位于通用RAM(随机访问存储器)中(也可以理解为内存),通过堆栈指针的上下移动来实现存取数据。堆栈指针向下移动,则分配新的内存;堆栈指针向上移动,则释放内存。堆栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但是Java系统必须知道存储在堆栈内所有项目的确切生命周期,以便上下移动指针。
存储的数据大致分为两类:
<1>Java的基本数据类型共有8种,即int, short, long, byte, float, double, boolean, char(注意,string类型不是基本类型)。基本类型的定义是通过诸如int a = 3; long b = 255L;的形式来定义的,称为自动变量。出于追求速度的原因,它们存在于堆栈中。
<2>Java中对象的引用
堆栈有一个很重要的特殊性,就是存在于堆栈中的数据可以共享。
3)堆:
一个通用的内存池(也位于RAM中),用来存放所有的java对象,通过new关键字实现在堆中分配内存。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
4)常量存储:
常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在嵌入式系统中,常量本身会和其它部分隔离开,所以在这种情况下,可以选择将其存放在 ROM(read-only memory,只读存储器)中。
5)非RAM存储:
如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。其中两个基本的例子是“流对象(streamed object)”和“持久化对(persistent object)”。在“流对象”中,对象转化成字节流,通常被发送给另一台机器。在“持久化对象”中,对象被存放于磁盘上,因此,即使程序终止,它们仍可以保持自己的状态。这种存储方式的技巧在于:把对象转化成可以存放在其它媒介上的事物,在需要时,可恢复成常规的、基于 RAM 的对象。[/b][/b]
此博客大体内容参照http://ygc87.blog.163.com/blog/static/2396065201221062748908/
对堆栈方面有一些补充。