首页>>新闻中心>>建设知识

成都网站建设-关于网站代码的优化

来源: 本站    发布时间: 2018-12-31 21:09    阅读次数:

将对象设计为无状态对象;所谓无状态对象本身不存储状态信息(对象成员变量,或者成员变量也是无状态对象),这样多线程并发访问的时候就不会出现状态的不一致,Java Web 开发中常用的Servlet对象就设计为无状态对象,可以被应用服务器多线程并发调用处理用户要求,而Web开发中常用的贫血模型对象都是 些无状态对象。不过从面向对象的角度看无状态对象是一种不良设计。 

 使用局部对象:即在方法内部创建对象,这些对象会被每个进入该方法的线程创建,除非程序有意识地将这些对象传递给其他线程,否则不会出现对象被多线程并发访问的情形。 并发访问资源时使用锁;即多线程访问资源的时候,通过锁的方式使多线程并发操作转化为顺序操作,从而避免资源被并发修改,随着操作系统和编程语言的进步,出现各种轻量级锁,使得运行期线程获取锁和放锁的代价都变得更小,但是锁导致线程同步顺序执行,可能会对系统性能产生严重影响。 资源复用 系统运行时,要尽量减少哪些开销很大的系统资源的创建和销毁,比如数据库连接、网络通信连接、线程、复杂对象等。从编程角度,资源复用主要有两种模式:单例和对象池。 单例虽然时GoF经典设计模式中较多被诟病的一个模式,单由于目前Web开发中主要是用贫血模式,从Service到Dao都是些无状态对象,无需重复创建,使用单例模式也就是自然而然了,事实上,Java开发常用的对象容器Spring默认构造的对象都是单例。 对象池模式通过复用对象实例。

减少对象创建和资源消耗。对于数据库连接对象,每次创建连接,对数据库服务器而言是灾难性的,同时频繁创建关闭连接池也需要花费较长的时间,因此在实践中,应用程序的数据库连接基本都使用连接池的方式。数据库连接对象创建好以后,将连接对象放入对象池容器中,应用程序要连接的时候,就从对象中获取一个空闲的连接使用,使用完毕在将该对象归还到对象池中即可,不需要创建新的连接。 前面说过,对于每个Web请求,Web应用服务器都需要创建一个独立的线程去处理,这方面,应用服务器也采用线程池的方式,这些所谓的连接池,线程池,本质上都是对象池,即连接、线程都是对象,池管理方式基本相同。

一起设计吧
BACK