日期:2014-05-20  浏览次数:20871 次

单例模式action(顶着有分)
单例模式网络资源非常多,尤其感谢http://www.javaeye.com/topic/60179这里的分享。
在选择mvc框架的同时一直有个问题。
springMVC 看了很多帖子说,springMVC的action是单例的,所以性能要高。性能高很多?会造成什么问题?
我们知道struts2 的action是非单例的,在每次请求的时候都会创建一个实例action来处理请求。
那么他的性能存在了问题?struts2 是如何保证性能的?每次都创建了一个对象,垃圾回收问题呢?

看了很多文章都没有很清楚的介绍,只是简单的拿来对比。无论是不是线程安全的,无论是不是单例,至少
在选择mvc框架的时候要考虑性能问题。如果说单例模式是高性能的,但是同时也会造成很多问题,相反
非单例解决了单例的问题,但对性能又造成了多少影响?那么我们在选择的时候就需要有取舍,这个取舍是
如何评定的?

拿出来讨论,期待高手解释。


------解决方案--------------------
新手而已,性能什么不懂,等高手
------解决方案--------------------
这点影响可以忽略。

Servlet 也是个单实例的。所有单实例中不允许出现带有状态的成员变量。
------解决方案--------------------
解释不清。也没想过这问题。。。
------解决方案--------------------
单例模式我曾看过网上java的说法(我其实学。net的)说其实单例模式java没有完美解决方案。呵呵,我只知道一个简单的。。。
------解决方案--------------------
不知道,一般解决性能问题都从代码和sql优化上着手


------解决方案--------------------
这方面没研究过,期待高手解惑
------解决方案--------------------
哪有两全其美的东西呀。
------解决方案--------------------
等高手
------解决方案--------------------
我就顶一下吧!
------解决方案--------------------
顶一下!
------解决方案--------------------
Web框架中很多对象都是单例的,主要是那些为用户请求服务的Object往往是单例。

因为如果现在有100人访问你的Server,那么像Servlet,Action这类的对象就生产100个。
那将是对内存和时间的极大浪费。(new是比较耗费的一种操作,要锁,从JVM堆中分配内存,创建对象。)

最大的问题是,HTTP是无状态的,那么相应的request-response结构,就往往应该是无状态的。
所以单例(往往)足够了。


------解决方案--------------------
不是很清楚。。。也许struts2和EJB的无状态会话bean一样有个实例池,这样也许就不用每个request创建一个action instance了
------解决方案--------------------
这个不清楚
------解决方案--------------------
现在这机器 配置不比以前吧?

系统中对性能影响最显著的还是数据库操作啊
------解决方案--------------------
学习一下啊~~~~
------解决方案--------------------
探讨

现在这机器 配置不比以前吧?

系统中对性能影响最显著的还是数据库操作啊

------解决方案--------------------
这个,很正常了,单例可以提高性能,如果同一个类,要实例化两个对象,并发操作两个对象,

单例就无能为力了。 各有优点,看自己程序了决定了。
------解决方案--------------------
做个标记。有状态无状态是个什么意思来着。
------解决方案--------------------
study
------解决方案--------------------
struts2 的action 不能用单例模式,因为action相当于struts1里面的form一样了,所以没办法用单例模式。

虽然spring的mvc没用过,但是两者最大的区别在表现层上。

而且对于jdk1.5以后的版本来说,单例模式和 非单例模式在虚拟机里面已经做了很多优化,所以 单单从 单例模式 这个角度来比较效率是没意思的。

而从根本上来说 ,导致struts2 效率变慢的原因还是因为自己的 tag,所以只要对一些tag使用上斟酌一下,效率不会是大问题,

比如你用struts2的 动态树, sx:tree 必须引入 dojo,虽然jsp代码不多,但是生成html文件之后你会发现页面代码中添加了很多很多的js和css样式, 当树比较大的时候就会发现浏览器变得很卡。这点深有体会啊。但是其实用dtree完全可以实现这个动态树并且能够增加更多的css。
还有就是 用dojo 和 json等结合实现动态级联,这个暂时在一些浏览器下面还不支持,所以说关键在于一些struts2自带的扩展功能上,这些功能为了能够尽可能的变得通用,增加了很多很多不必要的判断和限制条件,所以降低了效率。

=====================

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。