RT

解决方案 »

  1.   

    释放资源和释放内存不冲突,是两个事情,而且资源,例如File,Socket,只有程序员才知道什么时候不需要再使用它们了,程序最多知道你哪个变量没有引用了。如果资源被这样的成员引用了。而且是依靠GC的时候来释放资源,那就太2了如果你知道你不再需要某个文件了,你不去Close它,而是等待那给Hold它的对象被GC,
    可是你知道什么时候GC吗?你不可能知道,然后你那个File还不能再打开,这不就是悲剧嘛。?!所以,结论就是资源不用的时候,程序员自己Close它。单例也如此,结贴吧。
      

  2.   

    以上提到的File,是广义的File,不要单纯理解为磁盘文件。结论就是不管是不是Singleton,都应该由程序员主动关闭资源。
      

  3.   


    当然有必要了,有些资源程序退出的时候,可能还是被占用的【例如JVM占用着】。比如某个Socket bind了某个端口,你程序退出去,没有close socket,这时候JVM可能还Hold着这个端口。
    使得你下次再启动程序,都无法Bind这个端口,这种情况没有见过吗?
      

  4.   


    Yes给你的Singleton提供个 ReleaseResource方法就行了。这是唯一可行,又简单的做法。
      

  5.   

    一个对象(或者资源)放到全局,可以被谁访问到,或者以Context的方式传递着,可以被谁访问到,或者成为某个对象的成员或Reference,这个是访问性的问题。Singleton的本意是解决访问性的问题。一个对象(或者资源),什么时候创建,什么时候释放,是一个生命周期的问题,当然了,和访问性有些关系。
    但是关系不大。(例如你要手工释放它的时候,你访问不到它,那你怎么释放啊?当然了,这不是绝对的..)我习惯把事情分解为基本上不相关的几个角度来看。资源释放,1. 它和是不是Singleton其实没有关系。如果说有关系,就是我上面括号里面说的(是程序员访问它的close,还是系统GC访问它的close)
    排除Singleton的影响,资源就是用完的时候关闭,没有别的了。
      

  6.   


    你纠结在我说的,搞得你学习的Singleton模式不像是Singleton了吧?
      

  7.   

    不要的变量还什么的设为NULL么..流,数据库的不用就关了,释放资源是GC做的事
      

  8.   

    释放资源,这个好像,单类不用吧,释放资源是释放内存,但是 java本身就提供了一些方法可以释放,程序员需手动释放的资源好像就是如流那样的。其他的释放要想编写手动的话,容易出问题吧。
      

  9.   


    感觉 单例不用去手动kill吧? 
      

  10.   

    唉,脱离SSH都不会写代码了吧?
      

  11.   

    在所有可能引起错误的地方加try{}catch{}并且加上finally{ 这里调用资源释放的方法 }