疑惑:关于单例模式和静态块、静态方法 单例模式保证在JVM中最多存在某个类的一个实例,那么这可以让一些资源文件只被一个实例使用,这种效果用静态块和静态方法也可以做到啊。而且用静态方法不会把类实例化,实例化的过程还让JVM多一些开销.....那为什么用单例模式呢?????? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是Google出的一些解释,还是不太明白........观点一:(单例)单例模式比静态方法有很多优势:首先,单例可以继承类,实现接口,而静态类不能(可以集成类,但不能集成实例成员);其次,单例可以被延迟初始化,静态类一般在第一次加载是初始化;再次,单例类可以被集成,他的方法可以被覆写;最后,或许最重要的是,单例类可以被用于多态而无需强迫用户只假定唯一的实例。举个例子,你可能在开始时只写一个配置,但是以后你可能需要支持超过一个配置集,或者可能需要允许用户从外部从外部文件中加载一个配置对象,或者编写自己的。你的代码不需要关注全局的状态,因此你的代码会更加灵活。观点二:(静态方法)静态方法中产生的对象,会随着静态方法执行完毕而释放掉,而且执行类中的静态方法时,不会实例化静态方法所在的类。如果是用singleton, 产生的那一个唯一的实例,会一直在内存中,不会被GC清除的(原因是静态的属性变量不会被GC清除),除非整个JVM退出了。这个问题我之前也想几天,并且自己写代码来做了个实验。观点三:(Good!)由于DAO的初始化,会比较占系统资源的,如果用静态方法来取,会不断地初始化和释放,所以我个人认为如果不存在比较复杂的事务管理,用singleton会比较好。 这个观点我并不同意!不要认为 new 一个对象是件很消耗资源的事情,事实上并不是这样。一个 new 仅仅需要十余个 CPU 指令就能够完成。而以目前 JVM 的性能,在内存分配上比 malloc 函数还要快。 火龙果在好几个帖子中都提到了new的性能,看来JVM改进的很快啊 hibernate多对一双向,求解 输入输出流问题 org.hibernate.SessionException: Session is closed! 老出404错误 struts跳转的问题(急) 我写的培植文件有问题吗?为什么老提示找不到驱动啊? 请各位推荐一个SSH的例程 求助,一个xml编码的问题,急! tomcat启动后无法使用,关闭时报:standardserver.await WebWorkBench Developer Café(WDC)标准J2EE框架下经验或者资料询问:) Spring基础求助 经典hibernate subclass,问题已找到。求解决方案。
观点一:(单例)
单例模式比静态方法有很多优势:
首先,单例可以继承类,实现接口,而静态类不能(可以集成类,但不能集成实例成员);
其次,单例可以被延迟初始化,静态类一般在第一次加载是初始化;
再次,单例类可以被集成,他的方法可以被覆写;
最后,或许最重要的是,单例类可以被用于多态而无需强迫用户只假定唯一的实例。举个例子,你可能在开始时只写一个配置,但是以后你可能需要支持超过一个配置集,或者可能需要允许用户从外部从外部文件中加载一个配置对象,或者编写自己的。你的代码不需要关注全局的状态,因此你的代码会更加灵活。观点二:(静态方法)
静态方法中产生的对象,会随着静态方法执行完毕而释放掉,而且执行类中的静态方法时,不会实例化静态方法所在的类。如果是用singleton, 产生的那一个唯一的实例,会一直在内存中,不会被GC清除的(原因是静态的属性变量不会被GC清除),除非整个JVM退出了。这个问题我之前也想几天,并且自己写代码来做了个实验。观点三:(Good!)
由于DAO的初始化,会比较占系统资源的,如果用静态方法来取,会不断地初始化和释放,所以我个人认为如果不存在比较复杂的事务管理,用singleton会比较好。
这个观点我并不同意!不要认为 new 一个对象是件很消耗资源的事情,事实上并不是这样。一个 new 仅仅需要十余个 CPU 指令就能够完成。而以目前 JVM 的性能,在内存分配上比 malloc 函数还要快。