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()臭名昭著,不过总比没有好。
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、你对一个变量赋null后,垃圾收集器并不马上动作,它是不定时的动作,要看各个jvm的具体实现了,他有一个算法,而起很复杂,直接关系到性能的问题,你可以去google上搜一下jvm就知道了。
2、你对一个变量赋null后,垃圾收集器并不马上动作,它是不定时的动作,要看各个jvm的具体实现了,他有一个算法,而起很复杂,直接关系到性能的问题,你可以去google上搜一下jvm就知道了。
topbit(无影雷霆):如果每次都调用System.gc(),因小失大呢?因为JVM进行内存回收的时候,会很耗系统资源的.
1.先new一个,然后多次使用,以及采用pool等手段。
2.作为参数传给构造函数。
3.作为参数传给调用的方法。
现在的问题,就是关于member varible还是local varible的问题:对于local varible,由于其生存周期本来就是到函数结束,因此就没有必要显示(explictly)对他赋null了,因为该变量已经不存在了,也就不存在对对象的reference了.是不是这样呢?
如果在A中有3个左右的方法,要对B的对象进行引用,算不算多呢?是采用member varible 还是local varible呢?
如果有多个函数对同一个对象进行引用,如果访问的是同一个实例对象且该对象可以一直保持,则用成员变量较好,减少对象的生成和释放操作。
如果用于对connection的引用,如果指的是物理connection,建议用成员变量保持。
如果用了连接池技术,即从poolconnection中获得的connection,我建议用局部变量,每次使用前申请,因为数据库连接供其他对象使用,保持的这个connection对象会失效,而且connection对象本身的开销并不大,不如用局部变量每次申请