关于J2EE应用的效率

大家有什么好的窍门吗?一起讨论讨论如何?
我窍门是软件不行硬件顶:(
问题1:硬件允许的前提下,Servlet容器和EJB 容器在一个JVM好还是在不同JVM下好?
问题2:是否应该尽量少用Remote接口?到底远程方法调用(用EJB)对效率的影响大,还是大量对象创建(不用EJB)对效率的影响大。
问题3:大量应用面向对象的设计的时候,会否影响效率(ArrayList al = new ArrayList()和List l = new ArrayList()哪个快? )
问题4:为什么都说EntityBean很慢?如果系统中没有很复杂的Transaction,而且数据库自身就很好的解决了并发问题,CMP还提供那些好处?

好问题,下面是我个人观点:

>问题1:硬件允许的前提下,Servlet容器和EJB 容器在一个JVM好还是在不同JVM下好?

如果能在一个JVM当然尽量在一个JVM,如果做集群,则不行了


>问题2:是否应该尽量少用Remote接口?到底远程方法调用(用EJB)对效率的影响大,还是大量对象创建(不用EJB)对效率的影响大。

远程调用应该尽量避免。大量对象创建,要视对象大小和调用的相关资源的多少。


>问题3:大量应用面向对象的设计的时候,会否影响效率(ArrayList al = new ArrayList()和List l = new ArrayList()哪个快? )

我感觉要做一个折中,不能在这个小方面过分苛求。


>问题4:为什么都说EntityBean很慢?如果系统中没有很复杂的Transaction,而且数据库自身就很好的解决了并发问题,CMP还提供那些好处?

CMP现在之所以没消亡,因为它的事务支持非常好,如果使用数据库解决事务,倒没必要使用CMP了。


谢谢banq
对于系统缓存,不知您是否有建议。我看了Jive的缓存,觉得不错,但是由于版本老,所以担心有一些BUG。Jakarta的Commons项目中有一个Pool的框架,我想利用它实现缓存。
目前我的项目中需要经常重复读取大量的数据。用Entity Bean不太合适。打算用DAO+JDBC,所以只好自己开发缓存了。

你说的非常对, Jive的缓存确实不错,但是重用性不好,无法提炼出重用到其它系统。

无论使用实体Bean还是DAO+JDBC,我都推荐在Web层做一层缓存,速度提升很多,JBossCache可以参考一下,当然,我的JdonSD中也有Cache,实现下来我个人认为不错。呵呵

计划用一周的时间读源代码,然后设计。
发现J2EE应用的难度不在于技术不会,而在于技术运用是否得当,比如这个项目,就是数据库应用而已,只是访问量大,效率问题就很突出了。

>技术运用是否得当
非常赞同这个观点,J2EE类似大的工具箱,选择合适工具很重要啊,这也是J2EE培训或咨询市场所在。

在安全性要求不高的情况下,表单采用客户端验证,也可以在一定程度上提高性能,同时也提高了易用性。Struts1.1提供了对客户端验证的机制:)