例子如下:
A是一个类,fun是其成员函数,还包含其他较占内存的数据成员
A a=new A();
do
{
   a.fun();}while(true);
a的资源是不是始终没有释放?程序运行过程是不是会引起内存的持续增加?如果采用下列方式
A a;
do
{
   a=new A();   
   a.fun();}while(true);
a=new A()后上次申请的内存会释放吗?
这两种方式,那种更合理?更节约内存?

解决方案 »

  1.   

    后面的方式,只能说,原本a指向的对象会进入垃圾回收,至于是不是一定,要根据当前的内存消耗情况确定。
    前面的方式,a占用的资源当然不会释放,因为它还在使用中,如果它持续引用其他占用内存的数据成员,的确会引起内存的持续消耗,但这与a没有直接关系,如果其他数据成员不再使用的话,可以将其置为null,让它们有机会被回收。a本身需要消耗总归是要消耗的,不会因为你重新new一个对象就会减少。
      

  2.   

    你的第2中方式每次都去new a
    不是会把你之前的数据给更新掉了么。。这么做还会多些开销。我觉得你这两种方式对于内存消耗来说没什么区别。运用个第一种方式更合理一些。。
      

  3.   

    方法和属性越多当然就越占资源。   
        
      好像没有电子版,这本书是相当好的。   
        
      http://www.dearbook.com   
        
      进入后选择“销售排行”看看,排在5.6名的就是,
      

  4.   

    A a=new A();
    do
    {
      a.fun();}while(true); 
    这种好,a 只是个临时变量当方法结束后很快就会被回收
      

  5.   

    第一个例子不会引起内存的持续增加,a这个对象的内存始终没有释放,因为总是被引用着。
    第二个例子每循环一次,都要实例化新的对象,原来的对象被GC回收