byte[] buf = new byte[1024];
buf = null;
//这样buf原来的内存就已经是可以被释放了,至于什么时候才真正被释放那是JVM内部的事情,你一般不需要关心

解决方案 »

  1.   

    gc但是需要注意Java虚拟机的内存管理机制不完善。
      

  2.   

    只要你不用了,没有变量引用你的数组了,Java 会自己释放它所占用的空间的。但具体什么时候释放,就看JVM什么时候高兴了
      

  3.   

    看看这个
    http://www-900.ibm.com/developerWorks/cn/java/l-JavaMemoryLeak2/index.shtml
    就会明白了
      

  4.   

    ChDw(米) ,一个数组如何能用一个null释放呢?对象才能吧。
    Java虚拟机的内存管理机制不完善这一句我很赞同,对象可以用null释放,可释放后对象还存在,这时可以用GC负责回收。
      

  5.   

    对于Java来说 数组同样是一个对象!
    你完全可以将String[] arr 强制转换成为Object,
      

  6.   

    Java虚拟机的内存管理机制并不是不完善,== null之后,没有其它对象引用到了原来的对象了
    JVM就会知道这个对象已经可以释放,在JVM进行GC的时候才真正释放它,这个本来就是JVM的做法当然,JVM的回收效率有些时候不太高这个是事实,不过目前的状况已经有比较大的提高了。
      

  7.   

    ChDw(米) 说的很对,你只需要将对象的引用关系给打断你的事情就完成了,至于是否真正回收如果仅做一个设置为null时可以肯定的说没有回收,但是我们只有先打断对象引用关系jvm才会回收我们设置的对象。
      

  8.   

    System.gc();
    但java的机制是即使你强制启动gc,通知gc运行,也不能保证gc一定会执行。
      

  9.   

    ChDw(米) 说的很对,你只需要将对象的引用关系给打断你的事情就完成了,至于是否真正回收如果仅做一个设置为null时可以肯定的说没有回收,但是我们只有先打断对象引用关系jvm才会回收我们设置的对象。
    System.gc();
    但java的机制是即使你强制启动gc,通知gc运行,也不能保证gc一定会执行。
      

  10.   

    System.gc()不能使jvm直接进行垃圾回收吧,jvm还是会等到它认为这个对象已经没用了才会自动收会内存啊
    如果是一个类对象可以调用finalize()方法,好象c++里的delete的作用,释放内存finalize—方法名。Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。