Java程序运行时,数据的存储位置

sofeye 2014-08-09 09:00:29
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/
对堆栈方面有一些补充。
...全文
550 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
S117 2014-08-11
  • 打赏
  • 举报
回复
java 的内存模型是什么样的,还是参考java虚拟机规范吧
yuhouqingchen_2648 2014-08-11
  • 打赏
  • 举报
回复
+1,楼主理解的很到位,都是内功啊。。。。
拯救司马 2014-08-11
  • 打赏
  • 举报
回复
我也来混2分
skgary 2014-08-10
  • 打赏
  • 举报
回复
我只能说,java的常量不可能存在ROM中。。。。
紫菱天宇 2014-08-10
  • 打赏
  • 举报
回复
楼上的楼上说的永久存储 是static 的吗
  • 打赏
  • 举报
回复
eg:
String ss = new String();
那么ss地址存在栈中指向堆中的一块内存,这块内存中存储ss的值;另外就是代码存储在代码区,常量存储在数据区
血饮 2014-08-10
  • 打赏
  • 举报
回复
好了,楼主可以结贴散分了
铭浩 2014-08-09
  • 打赏
  • 举报
回复
你是想说明什么呢?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧