一个java进程(部署在TOMCAT下)不停在运行(每15分钟执行一次操作),但是其程序中用到的对象用完后都没有去掉其强引用,也就收都没有让变量指向NULL,请问每运行完一次后java垃圾回收会回收掉这些对象吗?

解决方案 »

  1.   

    你的问题描述不清。不过,你可以简单测试一下,将jvm的max heap size调小,然后打印出gclog来确认是否有内存泄漏。
      

  2.   

    怎么说呢 ? 这个java进程是一直持续运行的  只是这进程所做的操作是每15分钟一次。 我的意思是 当我在new完对象后 一直保持着强引用 问题是 当这个进程执行完一次操作后 第二次执行的时候 第一次执行操作时new的对象有没有被回收
      

  3.   

    哪些东西会被回收,那些东西不会被回收?答案:
    1、类的定义不会被回收。
    2、类的静态成员不会被回收。
    3、被类的静态成员引用的对象不会被回收。例如某个静态成员是一个 List,那么其中的元素就不会被回收,每个元素引用到的其他对象也不会被回收;除非该静态成员引用到另一个对象去,从而解除对该 List 的引用。所以,要想程序及时释放内存,首先尽量少用静态成员,其次小心对待那些类型为集合的静态成员。至于其他的对象,例如在方法内部定义的变量,它们的回收是很快的,因为变量存在于堆栈中,方法执行完,堆栈里的东西就弹出来,引用就没了。另外还有非静态成员。当一个对象被回收时,其成员也会被回收,除非它们还被其他的对象引用了。
      

  4.   

    不知道你的代码是怎样的
    比如
    while (true) {
        Object o = new Object();
        Trhead.sleep(15*1000*60);
    }
    这样,每次循环都会回收o的,但是不保证及时回收所以说你要知道你的对象的作用范围,离开以后就算不手动设置null也会被回收