单例模式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了
[解决办法]
这个不清楚
[解决办法]
现在这机器 配置不比以前吧?
系统中对性能影响最显著的还是数据库操作啊
[解决办法]
学习一下啊~~~~
[解决办法]
所以使用单例模式的目的不是为了减少 对象创建带来的资源问题, 而是为了保证对象的唯一性。
spring3的mvc 和struts2 比较:
spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上 spring3 mvc就容易实现restful url。
struts2是类级别的拦截, 一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url。
spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量
struts2 方法之间也是独立的,但其所有Action变量是共享的,当然这不影响程序的运行。
[解决办法]
[解决办法]
来拿分的
[解决办法]
新手路过 帮顶~~~
[解决办法]
顶一下
[解决办法]
纯粹顶贴。
[解决办法]
学习了!
[解决办法]
单例只是节省了创建对象的时间,但是单实例对象不会被垃圾回收掉,常驻 JVM 内存。
像 Servlet 这种生命周期很复杂的对象,对象的创建是很复杂的,因此其在 JVM 中是以单实例对象存在的,毕竟一个应用中不会有上万个 Servlet。
而对于 Struts 2 的 Action 类来说,这个对象的创建基本上就是 new,相对于复杂的 Servlet 对象创建的时间来说可以忽略了。Struts 2 这么做的原因主要是与 Servlet API 解耦,Action 不再需要实现或者继承什么的。
[解决办法]
节省的还有内存~
Servlet的生命周期并不复杂,Tomcat的简化版我都重写过,对于Servlet单实例来说,一直存在是应该的,应该直到server shutdown~
[解决办法]
帮顶。。。
[解决办法]
坐等高手
[解决办法]
这个我相信设计师有一个对时间和空间代价的综合评估,单例可以是无状态的,但是单例组合的可能不是一个单例,非单例不用考虑线程问题,提升了性能,综合评估的方式可以是计算吧
[解决办法]
最近才学,顶!
[解决办法]
顶你上青天
[解决办法]
顶一下!!!
[解决办法]
继续顶!!!!
[解决办法]
顶顶顶顶顶
[解决办法]
qwdeqwqw qw
[解决办法]
dingding
[解决办法]
长见识了
[解决办法]
这个想法确实很不错
[解决办法]
因为在同一个线程里,单例的action创建一遍就不new 了。
struts2里每个请求都多一个new的步骤,性能自然会弱些
[解决办法]
发达双方的法的身份的上手法方式大幅的身份三顿饭
[解决办法]
各有优势,根据需求取舍。
[解决办法]
GetSingleInstance.纯接分。
[解决办法]
mark.楼主记得给分。到时候看看到底讨论到什么样子。
[解决办法]
受用了,谢谢
[解决办法]
bu dong
[解决办法]
学习了
[解决办法]
我顶。。。。。。快给分.
[解决办法]
good thing
[解决办法]
进来学习
------解决方案--------------------
定定顶
[解决办法]
非常感谢了,
[解决办法]
顶一下下
[解决办法]
mark..........
[解决办法]
我是来拿分的
[解决办法]
ding va
[解决办法]
关于单例的问题,使用spring+Struts可以得到非常好的解决。
所以现在SSH三个框架结合非常的好。
这里是一个 S1和S2的比较的文章,可以看看他们之间的Action的区别。
http://dev.firnow.com/course/3_program/java/javajs/200797/70140.html
[解决办法]
愚以为,
不论是单实例还是多实例,
都会占用系统资源,进而影响系统性能,
只不过影响的方式不一样而已,
就像串行和并行,
各有所长,各有所用。
[解决办法]
单例模式是有线程安全隐患的,因为当多个进程访问的时候
他们都会争用资源,就会产生线程安全问题。
而像struts2的action,每个请求都会产生一个实例,也就是不会出现线程安全问题,他是线程安全的。
呵呵,我理解的就这么多。
[解决办法]
JF~~
[解决办法]
我也很想
[解决办法]
学习,顶下......
[解决办法]
[解决办法]
接分 。。顶一下。。。
[解决办法]
JAVA的垃圾回收机制 用软指针指向引用对象的地址,而不是直接指向对象
[解决办法]
up up
[解决办法]
这个性能上可以忽略不计,而且在action上如果用单例的话会存在问题的,属性会出现混乱。
[解决办法]
综合考虑团队功底吧,如果对于单例引入的多线程等并发问题可以处理的很好,自然就用单例
否则还是牺牲一点性能,换取程序的正确性吧!
毕竟客户要的东西,首要的是要正确,其次才是性能的提升。
[解决办法]
顶。。。。。。
[解决办法]
目前还没进行过关于性能的研究,期待高手的解答
[解决办法]
学习下
[解决办法]
新的请求需要新的对象来处理。否则会出现错误
spring的单例你指的是DI吗,比如dao,性能上确实会提高