对象导论笔记-第五天 对象生命期 异常处理 并发

08/20/2011

1.10对象的创建和生命期

在使用对象时,最关键的问题之一便是它们的生成和销毁方式。每个对象为了生存都需要资源,尤其是内存。当我们不再需要一个对象时,它必须被清理掉,使其占有的资源可以被释放和重用。

对象的数据位于何处?怎样控制对象的生命周期?

C++认为效率控制是最重要的议题,所以给程序员提供了选择的权利。可以通过将对象置于堆栈(automatic variable)或限域变量(scoped variable)或静态存储区内来实现。这种方式将存储空间分配和释放置于有限考虑的位置,某些情况下这样的控制非常有价值。但是,也牺牲了灵活性。

第二种方式是在被成为堆(heap)的内存池中动态地创建对象。因为存储空间是在运行时被动态管理的,所以需要大量的时间在堆中分配存储空间,这可能要远远大于在堆栈重创建存储空间的时间。

动态方式有这样一个一般性的逻辑假设:对象趋向于变得复杂,所以查找和释放存储空间的开销不会对对象的差u你关键造成重大冲击。

Java完全采用了动态内存分配方式。

还有一个议题,就是对象生命周期。Java提供了被成为“垃圾回收器”的机制,它可以自动发现对象何时不再被使用,并继而销毁它。

1.11异常处理:处理错误

自从编程语言问世以来,错误处理就始终是最困难的问题之一。

异常是一种对象,他从出错地点被“抛出”,并被专门设计用来处理特定类型错误的相应的异常处理器“捕获”。异常处理就像是与程序正常执行路径并行的,在错误发生时执行的另一条路径,不会干扰正常的代码执行。异常不能被忽略,所以它保证一定会在某处得到处理。最后需要指出的是:异常提供了一种从错误状况进行可靠恢复的途径

Java的异常处理在众多的变成语言重格外引人注目,因为Java一开始就内置了异常处理,而且强制你必须使用它。

1.12并发编程

在计算机编程重有一个基本概念,就是在同一时刻处理多个任务的思想。许多程序设计问题都要求,程序能够停下正在做的工作,转而处理某个其他问题,然后再返回主进程。

大部分情况下:我们只是想把问题切分成多个可独立运行的部分(任务),从而提高程序的相应能力。在程序中,这写彼此多里运行的部分称之为线程,上述概念被称为“并发”

在语言级别上,多线程所带来的便利之一便是车个你许愿不用再操心机器上是有多个处理器还是只有一个处理器。由于程序在逻辑上被分为线程,所以如果机器拥有多个处理器,那么程序不需要特殊调整也能执行的更快。

所有这些都使得并发看起来相当简单,但是有一个隐患:共享资源。为了解决资源的共享问题:某个任务锁定某项资源,完成其任务,然后释放资源锁,使其他任务可以使用这项资源

Java的并发是内置于语言中的,Java SE5已经增添了大量额外的库支持。