使用quartz每20秒执行一次任务,任务中使用kettle做了一系列的数据抽取转换。程序跑了12个小时后内存从100上升到400.
使用jmap导出内存查看后发现内存增长后组要是Unreachable objects占用在增长。以下是Unreachable objects的明细图:请问又没有朋友遇到过这样的情况,或者有什么排查的好办法?

解决方案 »

  1.   

    quartz的线程初始化是10个,看下线程是不是一直在增加
      

  2.   

    1.查看是否存在隐晦的hold引用不释放的情况。(例如你的数据放在一个集合中,可以由什么问题,数据未处理也未消除集合对它的引用。)2.优化代码,数据抽取转换过程很容易频繁创建对象和销毁对象,采用对象池模式,可以每个处理数据的线程使用一个对象来存放需要操作的数据,这个对象暂时不要销毁,使用完毕还给对象池。自己设定对象销毁策略。这样可以减少GC负担。