java垃圾收集器是个最低优先级的线程,只有当cpu有空闲时才运行,这样我们就无法得知它什么时候运行,当我们明确要释放内存,进行垃圾清理时就可以手动调用垃圾收集器来收集垃圾!

解决方案 »

  1.   

    在开发real-time系统时应该用手动回收,不然jvm回收垃圾时可能导致系统无法响应。
      

  2.   

    自动回收是有代价的,会导致效率的降低,
    当初C++就是因为这个会降低效率而摒弃了他。
    编程的时候,当一个对象以后不再使用的时候,就应该在用完之后,将其设为null,这样可以让这个对象被最早的垃圾回收。java垃圾回收器,是自动收回不再使用的资源,而判断对象是不是被使用
    它是根据这个对象还有没有reference 指向它来判断的
      

  3.   

    real-time系统要怎么手动销毁对象呢?我的程序就是多线程的,在关闭程序的时候会产生6-7个线程,有时还会提示memory leak呢?用gc吗?好像都不推荐使用的呢?置为null也不能很快清除掉。
      

  4.   

    我今天就遇到这样的问题.结果调用finasize来执行内存释放才解决.我的程序是一个可以预览图片的applet.
    用户可以选择文件夹下面的图片文件,applet就能够显示这个文件的小图.
    问题在于当预览了几张很大的图片后程序就变得非常慢了,原因是applet没有将以前加载的图片资源释放出来.导致内存紧张.
    我的解决方法就是在每次调用图片预览方法,得到预览小图后就执行一次finalize()进行垃圾回收.这样虽然每次预览图片会稍微慢一些(0.5秒不到),但不会在预览了很多图片后系统就不能运行.这算是手工调用垃圾回收的好处了
      

  5.   

    我也不知道手动除了用gc还有什么别的办法了,
    好像现在手动的很少了,
    对于实时系统,用gc可能还不如自动回收效率高,毕竟是强制回收,和c++ 的delete不一样阿
      

  6.   

    垃圾回收器 是要等到没有内存空间了才会启动的.
    因为启动它要占用CPU,使效率降低,所以有时候它不会被启动的.
    所以我们要手动释放内存.
      

  7.   

    垃圾回收机制就像女人的脾气,你根本不知道什么时候会发作!所以当我们的对象不用的时候就set it null
      

  8.   

    gc cannot be forced to run, your code just suggest it should run. 
    finalize() is called by gc. 
    You can override finalize()o manually release resource. If you use finalize(), always put it in try-catch, and call super.finalize(). But you still can not access the memory management.
      

  9.   

    同意我爱中华
    实时系统应该用手东回收呀,不然,当系统应该响应时,正好没有内存,jvm开始回收内存,系统就无法响应了。