geek的技术日志,记录每一次技术思考的闪光点。

关于单例和static的区别

1.单例无论怎么说还是类实例,而类实例占用的内存空间是堆空间,而Class则被加载置方法区,包括所有的方法;
2.单例是从设计模式层面讲的,是相对类的运行空间讲的,spring容器也有单实例的概念,但它的“singleton”实例是容器创建的,并且无需满足“自行创建”的要求。因此单例是相对的,在Spring的项目中,是相对Spring容器,在需要“自行创建”的环境中,是相对JVM实例的,也就是一个运行中的Java程序,显然Static是绝对的概念;
3.单例是类实例,从另一个角度看,首先是对事物的抽象,同时由于事物在现实环境中是单一的实体、资源等等,例如一个公司就一台打印机那样。从设计角度看,这个类需要抽象出事物的特性,同时由于是单例,是竞争资源,所以需要考虑互斥问题,否则就用Static得了,毕竟简单。

4.  单例模式,明明白白就是创建一个类的实例嘛,static方式,不会创建任何实例,只是把类加载到内存就行了,如果你只是想提供一个通用公共接口方法的话,就好比一些以Utils结尾的类,那就用这种方式比较好,如果有更多事要做的话,比如管理一些状态,对象等,就用单例模式

5. 单例可以延迟加载。省内存。static可以被new多个出来。

未经允许不得转载:极客技术 » 关于单例和static的区别

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址