1.如何手工销毁一个对象,释放其占用的内存空间
2.如果一个对象容器中,比如ArrayList,其中存放了很多对象,这些对象在什么情况下会自动销毁?容器对象销毁了,这些对象会自动销毁吗?调用ArrayList.clear()方法以后,这些对象会自动销毁吗?

解决方案 »

  1.   

    第3个问题:
    static A a=new A();
    A aa= new A();
    a=aa;那么第一次创建的A的实例会自动销毁吗?
      

  2.   

    Java某些版本的语法是支持C++方式的手工释放的.
    这样我觉得比较好一些,但是不是Java标准.至于他们甚么时候被销毁,不是我们可以控制的,那是gc的事情.
    我们写代码只能保证gc能不能删除他们.
      

  3.   

    1、通常情况不用自己动手来清理!
    2、调用ArrayList.clear()方法以后,会被清理掉。
    3、第一次创建的A的实例肯定会自动销毁
      

  4.   

    1。手工好像不可以
    2。应该是告诉虚拟机这个ArrayList没用了,但是虚拟机不一定马上销毁它
    3。会
      

  5.   

    晕,如果真是这样,那真不敢相信JAVAR虚拟机能做到这么牛
      

  6.   

    如果在调用ArrayList.clear()的同时,其中有一个对象正在被其他线程调用,这个时候会出现什么情况?
      

  7.   

    根本不用理这些东西——除非是高高手——平时稍微注意就可以了
    如果你明白第3个问题的a=new A()分配的内存没有用到(好玩?),避免这么写不就可以了——实际上是被回收的Java号称自动回收,一般情况应该是没有问题的;如果到了这个问题也需要计较的时候,你已经是高高手了如果还想进一步了解,百度或google一下吧,好多东西,我都看不过来~
      

  8.   

    同意楼上的,java语言中并没有析构函数。自身的垃圾回收机制就很强,所以释放的问题一般可以不用考虑的。当然特殊的情况除外,不过我还没有遇到过。:)
      

  9.   

    java语言自带gc回收机制,这些东西,让系统自己做去吧,咱们不用考虑了
      

  10.   

    在你用JNI的时候使用c或者c++手动在栈上分配对象空间时要手动回收
      

  11.   

    析构函数是有的,就是所谓的 finalize ,但是调用该方法并不能保证对象本身会立刻
    被gc回收
      

  12.   

    JAVA自带了回收机制,它是当达到一定的程度,自动会去回收
      

  13.   

    如果在调用ArrayList.clear()的同时,其中有一个对象正在被其他线程调用,这个时候会出现什么情况?
    ArrayList中放的是对象的"引用",如果对象还被其他地方"引用",你即使clear()一万次,对象还在.
      

  14.   

    晕,感觉大家都太依赖gc了!为什么java程序总是那么占内存,而且越占越多,包括eclipse之类的软件,个人觉得其中肯定有gc处理不完善的原因
      

  15.   

    GC确实有它不完善的地方
    以后的JVM会改进的
      

  16.   

    GC 受先天条件制约,必然存在效率问题(相对于“程序主动释放”而言),因为它不可避免地是一个“发现-清除”的过程。无非是某个算法在某些情况下性能表现更好一点而已。不过,好像目前还没有关于 GC 在“正确性”方面的 BUG 报告。至于“java程序总是那么占内存,而且越占越多,包括eclipse之类的软件”,应该跟 GC 的“正确性”关系不大,倒是有可能跟 GC 的“性能优化算法”有关系。
      

  17.   

    好象在java中有一个析构函数吧。finalize()