support (a)
if a will be shared in many method at a class,otherwise,choose (b)

解决方案 »

  1.   

    1:
    public class A
    {
      public A() {}
      public useB() { B b = B.createInstance();}
    }public class B
    {
      private B() {}
      public B createInstance() {return new B();}
    }通常这样就可以了。
    如果你可以确定在任何一个A的对象的生命周期内,都要使用同一个B。
    那么,
    public class A
    {
      public A() {}
      public useB(){ if (b==null) b = B.createInstance(); // Do something with b.}
      private B b = null;
    }2:
    绝对不会马上释放。
    不过用下面一段代码,几乎可以做到马上释放:
    Boy boy = new Boy();
    // Do something...
    boy = null;
    System.gc();虽然System.gc()臭名昭著,不过总比没有好。
      

  2.   

    1、要看你的具体的使用要求,一般用局部变量,但是当你在多个程序块中对同一个对象操作,并共享操作结果,你必须用成员变量;
    2、你对一个变量赋null后,垃圾收集器并不马上动作,它是不定时的动作,要看各个jvm的具体实现了,他有一个算法,而起很复杂,直接关系到性能的问题,你可以去google上搜一下jvm就知道了。
      

  3.   

    1、要看你的具体的使用要求,一般用局部变量,但是当你在多个程序块中对同一个对象操作,并共享操作结果,你必须用成员变量;
    2、你对一个变量赋null后,垃圾收集器并不马上动作,它是不定时的动作,要看各个jvm的具体实现了,他有一个算法,而起很复杂,直接关系到性能的问题,你可以去google上搜一下jvm就知道了。
      

  4.   

    我知道在C++中,频繁的new对象,然后delete掉,既便没有内存泄漏问题,也会造成系统的不稳定.在java中虽然内存的释放是由JVM来完成的,但会不会也存在者同样的问题?
     topbit(无影雷霆):如果每次都调用System.gc(),因小失大呢?因为JVM进行内存回收的时候,会很耗系统资源的.
      

  5.   

    to  web_spider(蓦然回首,那人却在、灯火阑珊处。) 同意你的意见,这也正是System.gc()臭名昭著的原因。
      

  6.   

    要看具体的要求,如果是不怎么耗资源的对象,如String、Integer等,怎样用都没太大关系。如果是很耗资源的对象,如Connection:
        1.先new一个,然后多次使用,以及采用pool等手段。
        2.作为参数传给构造函数。
        3.作为参数传给调用的方法。
      

  7.   

    谢谢大家,对于内存的回收,我已经比较清楚了.
    现在的问题,就是关于member varible还是local varible的问题:对于local varible,由于其生存周期本来就是到函数结束,因此就没有必要显示(explictly)对他赋null了,因为该变量已经不存在了,也就不存在对对象的reference了.是不是这样呢?
    如果在A中有3个左右的方法,要对B的对象进行引用,算不算多呢?是采用member varible 还是local varible呢?
      

  8.   

    cbhyk() :具体的应用正是connection的对象.
      

  9.   

    局部变量在函数执行结束后,会自动变为null,没必要显式地置为null。
    如果有多个函数对同一个对象进行引用,如果访问的是同一个实例对象且该对象可以一直保持,则用成员变量较好,减少对象的生成和释放操作。
    如果用于对connection的引用,如果指的是物理connection,建议用成员变量保持。
    如果用了连接池技术,即从poolconnection中获得的connection,我建议用局部变量,每次使用前申请,因为数据库连接供其他对象使用,保持的这个connection对象会失效,而且connection对象本身的开销并不大,不如用局部变量每次申请