改善J2EE程序性能的一些方法

一个j2ee项目的性能会受多方面的影响,比较常见的一个是web前台的大量访问,web前台的程序要能够处理高并发量的请求,但要达到这种要求了一般从编码角度来考虑起的作用不太大,我们通常的一个web项目使用MVC模式的一些开源架构作为基础,使前台的程序结构比较明了,在有些地方使用LazyLoading的设计模式,一般也就仅此而已,跟多的改善性能的措施一是垂直方式(如增加机器的硬件,设定一些JVM和服务器的优化配置),二是水平方式(采用群集的方式,在多台机器上部署web前台的程序,利用负载均衡的策略将用户的请求发送到不同的服务器上),通过上述方式来改善web前台的性能(实际上是用户体验)。

我们在这所说的web前台指的是一些页面相应的程序和一些简单的逻辑处理,不包含真正进行业务逻辑处理的功能,当然你可以将所有的一切放在一个项目中,部署到一台服务器上,完全没有问题(除了有些功能的完成不是你所写的而是你调用别的程序来得到结果) ,但在一个大型的j2ee项目中通常是不会由一个程序项目完成的,在这样的项目中,前台的程序相应用户的请求后,将一些信息封装好后去调用中间件程序或后台程序,那这些中间件和后台一般会单独作为一个项目部署在其他的机器上,之所以要把它们分开部署,就是可能一个VM的处理效能不够,而采用分布式处理的方式,采用分布式处理可以提升效率,但也带来了一些问题,如安全性问题,分布式事务处理的问题等等,好在这些问题一般我们在写程序是不用考虑太多,相应的分布式处理框架一般都提供解决的方法,但仍有一些是我们可以通过程序来改善的,比如在安全性问题上,我们在传输信息是可以加上自己的密匙(比如一些md5或是base64的字符串,传输的信息也可以先转换成md5或是base64再传输,当然这些对应的是些字符串的信息)。虽然通过分布式处理方式可以提高单个VM的效率,但它要通过网络来相互调用,而这种远程的调用要比VM内部的方法调用要慢很多(好几个数量级),所有我们尽量减少网络调用的次数,比如运用VO模式,将所有的状态数据包装成一个可序列化的对象来传输或读取,从而减少远程调用的次数。另一方面在分布式处理的方式中如xmlrpc,web services中我们可以多考虑用异步调用的方式来取代同步调用的方式,这也可以改善调用方的性能(多是web前台),但有些情况是不能用异步方式调用的,比如调用方等着返回的结果来进行下步的实时操作,但有些比如调用方调用发送邮件的中间件就可以用异步的方法了。

在中间件或后台程序中不可避免的要同数据库打交道,持久层的设计也是影响一个j2ee项目的重要原因,这中间有两方面,一个是同数据库的连接是个开销比较大的地方,在这里我们大多用数据源来连接程序和数据库;还有一个就是操作数据库的代码,这个方面的东西要说的很多,现在一般是用ORM来做数据持久方面的工作,我们将在以后单独讲讲。除了持久层方面,中间件部分还有很多别的地方要注意的。一个就是我们在中间件上调用业务逻辑处理这部分,一个用户调用一个针对他的业务逻辑处理对象,如果用普通的类来做,中间件的负荷也就比较大了,在这里我们可以用Session facade模式,即用Session bean来封装业务逻辑部分,用户的请求到达中间件后有一个相对应的session bean来处理(多为简单的无状态的session bean) ,之所以这么做是利用了ejb容器对session bean的优化,另一方面在session bean中跨数据库的事务也很好维持(也是由ejb容器来负责)。对应于session facade,还有message facade,它是利用消息驱动bean和jms来处理一些消息和队列方面的问题,它也可以是异步的方式(这方面我还没玩过,等有些经验后再总结出来)。除了采用session bean来处理用户的逻辑请求,在中间件中我们还可以采用Service Locator模式来提高中间件的性能,说白了,该模式就是采用缓存机制来响应前台的调用,多在实际中使用一个static 的hashmap来做为缓存,存储一些如EJBHOME,JMS连接工厂,数据源等,从而减少大量的jndi查找和远程调用的次数。

以上就是我用过的一些改善j2ee程序性能的方法,简单好用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值