java对象的存储

必须创建所有的对象

创建完reference之后,你就得往上面连新的对象。大体上,用new关键字来作这件事,关键词new的意思是,“给我创建一个新的那种类型的对象。”所以在上述例程中,你可以用:String s=new String("asdf"); 它不公表示“给我创建一个新的String“,而且还用字符串参数告诉它“如何”制作这个String。当然,String并不是唯一的类,JAVA编程基本上就是在创建类。

数据存在哪里?

对程序运行时各部份是如何展开的——特别是内存是如何分配的,作一直观的描述还是很有必要的。数据可以存储在以下六个地方:

1、寄存器(Registers):这是反映最快的存储,因为它所处位置不同,在处理器里。不过寄存器的数量非常有限,所以它是由编译器分配的。你非但不能直接控制寄存器,甚至连它存在的证据也找不到。

2、栈(Stack):位于“常规内存区(General Random-access Memory area)”里,处理器可以通过栈指针(Stack pointer)对它进行直接访问。栈指针向下移就创建了新的存储空间,向上移就释放内存空间。这是仅次于寄存器的最快,最有效率的分配内存的方法。由于JAVA编译器必须生成能控制栈指针上移和下移的代码,所以程序编译的时候,那些将被存储在栈中的数据的大小和生命周期必须是已知的。这使得程序的灵活性受到了限制,所以尽管JAVA把某些数据——特别是对象的Reference存放在栈里,但是对象本身并没有放在栈里。

3、堆(Heap):这是一段“多用途的内存池”(General-purpose pool of memory,也在内存里面),所有JAVA对象都保存在这里。同栈不同,堆的优点是,分配空间的时候,编译器无需知道分配多少空间,或者这些数据会在堆里呆多长时间。因此使用堆的空间会比较灵活。只要你想创建对象,用new就行了,程序执行的时候自会在堆里分配空间。当然你得为这种灵活性付出代价,分配堆的存储空间要比分配栈的慢一些(假如你能像C++那样在栈里创建对象的话)

4、静态存储(Static storage):“静态”在这里的意思就是“在固定的位置”(尽管它还是在RAM里面),静态存储里面的数据在整个程序的运行期间都能访问到。你可以用Static关键词来指明对象中的某个元素是表态的,但是JAVA对象本身是决不会放到静态存储中去的。

5、固定存储(Constant storage):常量值通常直接放在程序里,这样它们就不会被改动了,因而也更安全。有时常量还能为自己设置界限,这样在嵌入式系统中,你就能选择是不是把它们放到ROM里面去。

6、非内存的存储(Non-Ram Strorage):如果数据完全独立于程序,那么即使程序不运行,它也应该还在;即使程序失去了对数据的控制,它也仍然还在。两个最主要的例子是“流对象(Streamed Object)”和“Persistent对象(Persistent Object)”,大致上说,前者是一种会被送往另一台机器的,由对象转化而成的字节流;这类存储的奥妙就在于对象被转化成了某种能保存在其它介质上的东西,但是要用的时候,又能在内里重建;JAVA提供了“轻量级Persistence(Lightweight Persistence)”的支持;未来JAVA可能会提供更为完整的Persistence的支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值