1、定义一个数组:
String[] ay = new String[99999999];
这时运行程序,在windows任务管理器时能看到当前内存占用68M如果不定义这个数组,内存占用32M我把 av = null;写在定义数组后面怎么内存还是占用68M?没有回收怎么才能实现定义这个数组后,内存还是32M?2、对jtree做了个鼠标点击事件,在事件中实例了一些变量,比如map vector等,
怎么对实例的这些变量进行回收?
事件完成之后这些变量是需要根据我点击不同的树点存不同的数据,以后要用的。顺便多问一下,netbeans到底能不能把被保护的自动生成代码段去掉?意思是自动生成,但是可人为修改:直接在代码编译器里修改

解决方案 »

  1.   

    我也是听人说地,传说中JAVA不可以让内存自动回收,虽然里边有个叫什么方法的,你写了以后JVM知道可以回收了,虽然你写了,也只是告诉JVM可以回收了,但是它就是不回收你也没办法
      

  2.   

    System.gc();//运行垃圾回收器。
      

  3.   

    System.gc();System.gc();System.gc();System.gc();System.gc();System.gc();System.gc();System.gc();System.gc(); 对这个方法简直无语了,一点做用也没有
      

  4.   

    一般有随机跟强制的。平时都是随机机制,不足了才会强制执行回收。System.gc();即使写了这个代码,虚拟机也不一定执行。
      

  5.   

    在内存吃紧的情况下jvm会自动回收内存,68m不是很多
      

  6.   

    你不必关心JVM如何去释放资源的
    不然还不如去学C++ 用一个 delete一个
      

  7.   

    System.gc();
    这也不能保证。
    没有办法, Java除去了C++中的析构。
      

  8.   

    sun公司这样设计jvm是有原因的,为了跨平台,java牺牲了这方面的性能,把jvm设计成内存吃紧的时候才去回收。不停的回收也会降低性能的
      

  9.   

    一般的回收算法并不是不用的时候它就马上回收,需要一段时间,比如它在一个线程里面专门回收内存用,那么这个线程的回收需要一定的事情发生它才会运行,而有的用标记回收,它先要有个标记的过程,并不是你说这内存老子不要了它马上就收回去。
    打个比方你就是jvm,在操作系统层,在你提出内存申请的时候,它尽量满足你的需求,比如你说我要100M,操作系统给了你100M内存,这100M内存记在你的头上,而你拿到这些内存后给对象A分配了10M,给对象B分配了10M.....但是现在对象A说我要释放内存了,此时对象A只是把内存返回给了你,它并没有归还给操作系统,此时操作系统记载着你借了它100M内存不变。只有当操作系统内存是在匮乏的时候它才会想方设法找你归还内存。所以这就很明显了,将变量设成null其实内存还是不见回收
      

  10.   

    jvm自身带的就有内存垃圾回收机制。可以进行垃圾的回收。
      

  11.   

    String[] ay = new String[99999999]; 
    ay = null;这里无法保证立即回收,java的垃圾回收时优先级很低的线程。也就是说只有jvm不干其他事情来或者说内存吃紧了才会清理垃圾。
      

  12.   

    System.gc()或者置对象为null,JVM并不会马上进行回收,当系统内存不足时,系统才会去寻找那些“无用”的内存单元。这在J2ME中表现比较明显,调用System.gc()能够明显看到内存的变化。
      

  13.   

    java垃圾回收没有办法控制的,这种事情还是让jvm去做了。不要想着java什么时候去回收内存,更加不要去依赖它。强烈建议不要在finalize方法里面写代码。除非你真的非常清楚的理解java的垃圾回收机制。
      

  14.   

    绝对不推荐在可能的高并发程序中强制执行gc,因为这样做会影响正在运行业务,吞吐量不稳定等一系列问题.
    可以通过扩内存,或更换gc算法的方式(加JVM的参数就可以,查Java Doc.如果一定要执行gc,System.gc();或手工设置为null是没有用处的.唯一见到的通过java能够确保gc执行的,是MBean中或JMX中有这样的任务.楼主可以去看看.最后还是要说,不要那样做,那样带来的问题更加严重.
      

  15.   

    no idea. it's impossible! otherwise,u can rewirte JVM!!!!
      

  16.   

    JVM是随机回收的,即使你写了System.gc();所以你是不能确定JVM什么时候进行垃圾回收的.