请问一个关于垃圾回收不彻底的有关问题

   阅读
请教一个关于垃圾回收不彻底的问题
先给进来的朋友拜个早年了! ^^

我有个程序,在tomcat的应用里起了2组Timer/TimerTask来执行定时任务,
运行期间用visualVM看内存堆的回收情况,
每次回收都不是很彻底,
虽然用Xms和Xmx定义了512M的内存,
但还是在运行了一定的时间后(大概7-8个小时),
报出了OOE的错误。

图形如下


请问有可能是哪个地方的代码导致的内存回收不彻底呢?

或者是不是用什么类似于xms/xmx的参数可以避免这种问题的发生呢?
(不想直接加大内存,这样只是治标不治本。顶多是延长了不崩溃的时间。早晚还是要崩的)

因为代码有点多,就不贴出来了,
可以保证资源该关的都关掉了。
(比如连接数据库的con/ps/rs等,还有连接JMS的conn/session等对象)

会不会和log4j的对象声明有关呢?
在程序里我是这么声明的,不过好像都这么用吧?!
private static final Log log = LogFactory.getLog(XXX.class);
如果有问题的话,是static的问题呢?还是final的问题呢?

谢谢!

good luck

------解决思路----------------------
多半是内存泄露,  内存满的时候分析下dump文件, 查看占用内存的对象.  差不多能找出出问题的地方.
------解决思路----------------------
引用:
多谢回复!

-XX:+HeapDumpOnOutOfMemoryError的参数我加上了
文件我也通过vistualvm分析了,
看样子也没有什么特别大和特别多的比较诡异的内存占用啊

这是按大小排序的实例信息,
请教一下有什么是比较特别的吗?


再次感谢


不懂你的业务。

但从常识来猜测,你贴出部分最可疑的部分是 ActiveMQConnection,你8700多个实例,一般Connection的个数应该是有限的吧。

具体什么问题,估计你还得往下看,看看你自己的业务部分,哪个类的用的内容多。
阅读