论坛首页 Java企业应用论坛

为什么需要Singleton

浏览 47993 次
该帖已经被评为良好帖
作者 正文
   发表时间:2009-06-10  
ywlqi 写道
qzzlw 写道
类的属性是全局的,系统一启动就已经在全局静态数据区分配好了资源,而单例是对象,只有在需要的时候才在堆内分配资源来放置实例属性。从封装的角度或者资源占用的角度来看 ,单例可能会更好一些。

同意!!


前面我已经多次解释了 这个问题
类不是在 系统一启动时 就加载,
而是第一次被引用时加载。。。
还有 难道单例对象的类就不需要加载吗?
0 请登录后投票
   发表时间:2009-06-10  
(接上个回复)
我觉得类也可以实现数据封装

从资源占用的角度来看,我反而觉得AnotherSingleton
更好一些,因为它不需要实例化对象
0 请登录后投票
   发表时间:2009-06-10  
gthacker 写道
应该还是编程规范的原因

支持这个回复,可能就这个区别了吧
如果用对象应该更面向对象一些
0 请登录后投票
   发表时间:2009-06-10  
看看那些框架的应用!
0 请登录后投票
   发表时间:2009-06-11  
pojo333 写道
看看那些框架的应用!

举个例子。。!
0 请登录后投票
   发表时间:2009-06-11  
303535576 写道
gthacker 写道
应该还是编程规范的原因

支持这个回复,可能就这个区别了吧
如果用对象应该更面向对象一些


恩 。。。
可能这就是这个区别了吧
不过感觉 静态的 效率更高一些
0 请登录后投票
   发表时间:2009-06-11  
类不能作为参数 和 返回值

0 请登录后投票
   发表时间:2009-06-11  
步行者 写道
qzzlw 写道
类的属性是全局的,系统一启动就已经在全局静态数据区分配好了资源,而单例是对象,只有在需要的时候才在堆内分配资源来放置实例属性。从封装的角度或者资源占用的角度来看 ,单例可能会更好一些。


类不是在系统一启动时就加载,而是在第一次引用,或实例化时进行加载
还有另一种方法加载类
Class.forName("XXX");
反而对象的初始化要先加载类,
再进行实例化。
所以我觉得从资源占用的角度来看 ,类反而要好一些。

至于封装,也可以通过私有静态属性来封装类状态,
我觉得这也不是问题




我说的是属性,不是类加载的问题。静态的属性肯定是放在全局数据段,而且一直占用,实例属性是在堆中需要的时候分配的。我这是从PE文件结构来理解的,java虚拟机应该也差不多。
0 请登录后投票
   发表时间:2009-06-11  
qzzlw 写道
步行者 写道
qzzlw 写道
类的属性是全局的,系统一启动就已经在全局静态数据区分配好了资源,而单例是对象,只有在需要的时候才在堆内分配资源来放置实例属性。从封装的角度或者资源占用的角度来看 ,单例可能会更好一些。


类不是在系统一启动时就加载,而是在第一次引用,或实例化时进行加载
还有另一种方法加载类
Class.forName("XXX");
反而对象的初始化要先加载类,
再进行实例化。
所以我觉得从资源占用的角度来看 ,类反而要好一些。

至于封装,也可以通过私有静态属性来封装类状态,
我觉得这也不是问题




我说的是属性,不是类加载的问题。静态的属性肯定是放在全局数据段,而且一直占用,实例属性是在堆中需要的时候分配的。我这是从PE文件结构来理解的,java虚拟机应该也差不多。


静态属性也是在需要的时候被加载进内存的啊 
静态属性不是定义在类中吗
类加载后 类的属性才能被放在全局数据段中

实例属性 也只有实例被创建后才能被保存到堆中
但首先也需要加载相应的类


0 请登录后投票
   发表时间:2009-06-11  
步行者 写道
qzzlw 写道
步行者 写道
qzzlw 写道
类的属性是全局的,系统一启动就已经在全局静态数据区分配好了资源,而单例是对象,只有在需要的时候才在堆内分配资源来放置实例属性。从封装的角度或者资源占用的角度来看 ,单例可能会更好一些。


类不是在系统一启动时就加载,而是在第一次引用,或实例化时进行加载
还有另一种方法加载类
Class.forName("XXX");
反而对象的初始化要先加载类,
再进行实例化。
所以我觉得从资源占用的角度来看 ,类反而要好一些。

至于封装,也可以通过私有静态属性来封装类状态,
我觉得这也不是问题




我说的是属性,不是类加载的问题。静态的属性肯定是放在全局数据段,而且一直占用,实例属性是在堆中需要的时候分配的。我这是从PE文件结构来理解的,java虚拟机应该也差不多。


静态属性也是在需要的时候被加载进内存的啊 
静态属性不是定义在类中吗
类加载后 类的属性才能被放在全局数据段中

实例属性 也只有实例被创建后才能被保存到堆中
但首先也需要加载相应的类



类是什么呢?类只不过是方法和数据的集合,方法都在代码段,这部分内存是不可能省掉的。数据如果是静态的,就在全局数据段,这部分永远会加载到内存。实例数据只有在构造类实例的时候才占有堆内存。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics