你说的kill掉,可是强行kill掉这个程序,这我不知道!如果是程序正常退出的话,你只要覆盖finalize方法就可以了,你试试看kill掉这个程序,会调用这个方法的吗?
第2个问题吗?运行Java程序应该不会出现这样的情况的,因为Java有Garbage Collection的机制的吗!如果实在系统内存会被占用的越来越多的话,关掉几个程序,再不行,伙计还是多加点内存把!!!

解决方案 »

  1.   

    第一个不知道,第二个是因为JAVA的垃圾收集机制的原因,因为垃圾收集的优先级非常的低,当你程序在不断运行时,没用的东西还会一直在内存中(没机会清除),有一种方法是自己手动的进行收集,可以用System.gc(),或者重写finalize()方法
      

  2.   

    JAVA程序的运行本身是就是多线程的,有垃圾回收的线程回收那些不用资源,但是它的优先级很低,很多时候你是感觉不到的,但是如果资源非常少的情况下,也会强制回收一些资源,但是通常自己动手回收更有效就是用System.gc(),或者重写finalize()方法
      

  3.   

    JAVA的垃圾收集机制会自动处理
      

  4.   

    伙计, 我觉得把全世纪的内存都加到上面,也会用光的, 呵呵!
    我曾经用过 gc()的方式进行内存的回收,但是没效果!
    我不知道,是否当变量new过以后,是否要赋null才能被及时回收掉!
    如果是这样的话,我倒觉得c++的自己管理内存的机制还要可取得多,
    想用就new,不用就delete掉!关于第一个问题的解决方法,我去try一下先!欢迎大家踊跃发言哦!
      

  5.   

    to: xiaofish() 你要弄明白在什么情况下java的垃圾回收才能回收对象所占用的空间。那就是只有当一个对象没有被任何引用指向它的时候,这时java的垃圾回收程序才能够回收这个对象所占用的内存空间。  这种机制是非常好的,你不必为担心何时释放一个对象而举棋不定。比C++的机制强好很多。 
    从表面上看当你不用一个对象时,在java里和在C++里的操作好像都差不多比如
    aObject := null; //java
    aObject.delete;  //C++
    表面上好像都差不多,其实一点也不一样。C++里要复杂的多,这种情况存在于多个指针(引用)指向一个对象时,比如在C++中,如果有二个引用(C++里叫指针?  我不知道叫什么,就都叫引用吧)指向了一个对象,当你delete掉这个对象后,而其它的引用并不知道这个对象已经被delete掉了,所以当你通过其它的引用再使用这个对象时就会出错。 而java不是。当你写 aObject := null; 这句话时,那个对象并没有被释放掉。只是当前的这个引用不再指向它而已。 所以不会影响其它也指向这个对象的引用。 不会引起向C++里的问题。而当指向这个对象的所有的引用都不再指向这个对象时,它才会被归入到垃圾回收器待回收的对象列表里。等待回收。所以我们没有垃圾回收机制的程序语言里所面对的困难不是 "忘记释放掉对象",真正的难点是“何时释放对象”。
      

  6.   

    你的内存总是再长的问题,我怀疑你是因为没有了解java的回收机制引起的,当你写 aObject = null; (对不起,上面我写错了,不是:= 是 = ,可能最近又写delphi 写多了^_^)
    这个对象并不一定会被释放。有可能其它地方还有引用指向它。所以你必需保证所有的引用都解除了才行。检查你的程序,如果你弄明白了这个道理,看看是不是程序写的有问题。祝你好运