常在论坛上看见一些有关单例模式、静态类、静态方法缺点的讨论,说得最多的无非是使用static,破坏了面向对象的多态性,建议除非确定了该对象不会被扩展,否则不要使用单例模式、静态方法等。其中,举例最多的是:
辅助类可采用单例、静态方法。
确实,我在开发中,看见的基本都是如此。但我一直有点疑问,今天在这提出,希望JE上兄弟讨论下:
辅助类使用静态方法就一定好吗?我
觉得可能也会存在如下问题:
1.如果类中属性或方法是static的,那么在该类被装载到方法区时,是要分配内存的。那如果是static的,是不是表示该类(非对象)永远不会被垃圾收集了呢?从而占用一定的内存空间,如果这样的类多的话,那JVM的可使用内存不是会很少?既然这样,又何必用静态方法呢?(
我不太确定含有静态字段或方法的类是否会被垃圾收集器收集)
2. 问题1一出现,则会衍生出问题2来,即由于加载到方法区中的类型都保持着一个对加载该类的类加载器的引用,既然类不能被垃圾收集,从而则一定会造成其对应的类加载器也不会被垃圾收集,这样,又会出现许多类加载不能被垃圾收集,不是更占有JVM内存空间了吗?
(
由于Java的安全性特点,加载不同包下的类的加载器一定不会是同一个对象吧。这个我不确定)。
基于以上问题,希望JE兄弟赏脸,讨论下。
先贴出我的观点:辅助类采用单例或静态天方法也不一定是最完美的。使用单例、静态的目的就是为了节省JVM内存,如果一个辅助类用的概率不是特别大,难道还应该向大部分人建议那样使用单例或静态吗?不应该了吧。
分享到:
相关推荐
QT 单例
static静态关键字和单例模式
单例模式的特点有三: ...除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()方法负责检验并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。
实验二:SRAM-静态随机存储器实验.pdf实验二:SRAM-静态随机存储器实验.pdf实验二:SRAM-静态随机存储器实验.pdf实验二:SRAM-静态随机存储器实验.pdf实验二:SRAM-静态随机存储器实验.pdf实验二:SRAM-静态随机...
计算机后端-Java-图解java设计模式029 单例(静态常.avi
计算机后端-Java-图解java设计模式030 单例(静态代码.avi
类方法和静态方法;类方法是类所拥有的方法,需要用修饰器“@classmethod”来标识其为类方法。对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(同self一样只是一个习惯),能够通过对象名调用类方法,...
主要介绍了Java单例模式实现静态内部类方法示例,涉及构造函数私有化等相关内容,需要的朋友可以了解下。
单例模式 = 单身人士 确保一个类只有一个实例并提供对它的全局访问点。...Java 的单例模式实现使用了一个私有构造函数,一个静态方法结合一个静态变量 检查您的性能和资源限制,并仔细选择合适的 Singletone 实现。
结论:单例模式可以把数据封装在对象里,操作对象;而静态类是把数据封装在类里,操作类。单例模式中,数据只有在对象存在的时候才能操作;而静态类中,数据可以直接通过静态类点出来操作。 2、工厂模式 结论:工厂...
主要解决在单例模式下类中声明静态指针存储单例对象,在.cpp文件中编译时显示未定义的解决办法: 参考博客: http://bbs.csdn.net/topics/10439749
华为培训课件:HC110113001 静态路由基础.ppt
在Joomla!涉及到了很多的单例模式,比如JFactory,JURI等等。 对于一个请求中需要一个对象实例的,joomla大多采用了单例模式,可以避免重复实例化带来的资源浪费和性能损耗。
电力系统分析:电力系统静态稳定.ppt
IIS下万能301跳转方法:URL伪静态重写+PHP301
C#静态方法与非静态方法的比较
java初学者在编写类,在调用方法,在静态方法与动态方法使用会出现的一些错误。 学习后 能初步了解自己的错误的原因 以及遇到这种错误的改正方法 避免下次踩坑
IPv6技术课件:配置IPv6静态路由.pdf
单例模式的七种实现方法以及分析,可以作文大作业提交 1.前言 4 1.1 课题的研究背景 4 1.2 课题主要研究目标 4 2.相关技术简介 4 2.1Java简介 4 2.2IDEA简介 4 3. 单例模式的7种实现方式 5 3.1饿汉式(使用静态常量...