Java对象的存储

一、要存储的跟对象相关的内容

1.对象句柄:面想对象的思维是“一切皆对象”;通过句柄来操作对象,句柄即是对象的引用,把它比作遥控器,对象比作电视机,即使没有电视机,遥控器也可以单独存在。

比如创建一个句柄:String s

但是没有初始化,因此它不引用任何对象,如果此时给s发消息,会产生一个运行时错误。

2.对象:Java对象是new关键字产生的一个类的实体,比如:

String s=new String(“abcd”);

该语句创建了一个String类的实例,并将该对象的引用赋给句柄s,现在就可以通过s来对该对象发消息。

3.静态数据:static关键字修饰的数据,存储在内存固定的地方。static也可以修饰类和方法,但是静态的类和方法存放的地点和静态数据不同。

4.常量数据:在整个程序中不会改变的数据,一般用大写单词表示,如:

public class Myconstants{

final static double ALPHA=1.1;

fianl static double OMGA=349.0;

}

对常量数据的访问可以直接通过类名,如:

System.out.println(“Myconstants.ALPHA+”+Myconstants.ALPHA);

5.流对象和持久化对象:Java程序中的对象一般在程序运行时存在,可随时供系统调用,这些对象存活于程序之中。Java中还存在存活与程序之外的对象和数据,不受运行时刻程序的控制,而独立存在。典型的是流对象和持久化对象。二者被存储在磁盘上,并保存了但是对象的状态。在需要该对象时,可以通过某种方式生成常规的对象。

二、存储空间

1.寄存器:最快的存储区域,存储在处理器的内部,但是数量有限。寄存器是根据需要由编译器分配,我们没有直接的控制权。

2.堆栈:存在于RAM(随机访问存储器)中,通过堆栈指针的移动来操作内存。堆栈指针上移释放内存,下移分配内存。该保存方式特别快、特别有效,仅次于寄存器。创建程序时,Java编译器必须知道数据的大小以及生命周期,因为他必须生成相应的代码,以便向上或向下移动指针。Java对象的医用存储在堆栈中。

3.堆:一种通用的内存,存在于RAM中,保存了Java对象。和堆栈比较,heap不需要编译器知道要分配多少存储空间和数据的生命周期,因此更灵活,但是在堆里分配存储空间会花费更多的时间。用new关键字创建对象时,会在堆里自动进行数据保存。

4.静态存储:也在RAM中,静态数据存处在这里。程序运行期间静态数据随时等候调用,Java对象本身永远不会置入静态存储空间。

5.常量存储空间:常量值通常直接置于程序代码内部,永远不会改变。需要严格保护的常量可以考虑置入ROM(只读存储器)。

6.非RAM存储:数据独立于程序之外,程序不运行时仍可以存在,并且在程序的控制范围之外。流对象,对象变成字节流通常发给另一机器;持久化对象,对象保存在磁盘中,即是程序终止运行,他们仍可以保持自己的状态不变。将他们存储在其它媒体中,一旦需要,恢复成为正常对象。

三、对象的生存周期

Java对象具有生命周期,在生命周期内系统可以随时调用。实际上new关键字创建的对象,只要系统需要会一直存活在内存中。但这样的对象不可能全部存活于内存中,不然很快就会耗尽内存资源。所以,系统会适当销毁一些暂时不用的对象,以释放空间给新的对象使用。

Java提供垃圾回收器,他会自动监视使用new关键字创建的对象,并设计了算法来识别系统不需要的类,释放这些对象占用的内存空间。程序员不必考虑对象的清理任务,垃圾回收器会自动管理。Java编程中不会出现内存泄漏问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值