解决方案 »

  1.   

    System.gc();
    是程序员手动调用的,这只是给jvm提个醒而已,告诉他该回收垃圾了,但是jvm什么时候真的去回收垃圾,我们就没有办法控制了。
      

  2.   


    正解,在JVM里面GC是一条优先级非常低的thread,调用时机一般是在heap要快满了或者当前java进程闲的蛋疼的时候,但可以调整GC的频率
      

  3.   

    楼上正解,有一些性能分析器,可以监测jvm的变化,可以看到当程序内存扩展到一定程度,GC启动回收同时会扩展一些预留内存
      

  4.   


    正解,在JVM里面GC是一条优先级非常低的thread,调用时机一般是在heap要快满了或者当前java进程闲的蛋疼的时候,但可以调整GC的频率
    我是问System.gc()是不是当前对象调用的?并且只对当前对象执行垃圾回收。
    public class A {
    public static void main(String[] args)  {
    new A();
                    new A ();
    System.gc();
    }}
    执行了System.gc();后系统是不是只进行A对象的回收?影响不到别的类对象吗?哪怕有另外的java类对象(比如有个B类的对象也在运行)已经成为垃圾。
      

  5.   

    gc 只能清除在堆上分配的内存(纯java语言的所有对象都在堆上使用new分配内存),而不能清除栈上分配的内存(当使用JNI技术时,可能会在栈上分配内存,例如java调用c程序,而该c程序使用malloc分配内存时).因此,如果某些对象被分配了栈上的内存区域,那gc就管不着了,对这样的对象进行内存回收就要靠finalize().
      

  6.   

    提示JVM,准备回收不需要的内存,至于何时回收,只有JVM调度清楚。不是我们想回收即可就回收的。
      

  7.   


    正解,在JVM里面GC是一条优先级非常低的thread,调用时机一般是在heap要快满了或者当前java进程闲的蛋疼的时候,但可以调整GC的频率
    我是问System.gc()是不是当前对象调用的?并且只对当前对象执行垃圾回收。
    public class A {
    public static void main(String[] args)  {
    new A();
                    new A ();
    System.gc();
    }}
    执行了System.gc();后系统是不是只进行A对象的回收?影响不到别的类对象吗?哪怕有另外的java类对象(比如有个B类的对象也在运行)已经成为垃圾。[/quote
    不是回收某个对象,而是回收系统中用不到的对象,而且虽然调用System.gc()之后,但是并不代表立即执行,而是当某个不确定的时候才执行,如果要让某个对象被回收掉,可以将这个对象置为null,如 A a = null,这样GC就会去回收a,但是具体在什么时候执行就不知道了
      

  8.   

    a只是个引用变量而已,回收的应该是new出来的对象吧