感谢回复!
因为这个程序是每个一段时间采集一次,后面平稳是因为采集的线程使用了sleep正在休眠,等待下一次的采集一旦下一次的采集开始,还是会继续增长

解决方案 »

  1.   


    感谢您的回复!
    不过我才是个JAVA新手,可能不太理解您的意思,您的意思是问如何采集的吗?
    这是一个使用新浪微博API采集的,数据库是mysql,还使用了hibernate组件
      

  2.   

    感谢回复!
    因为这个程序是每个一段时间采集一次,后面平稳是因为采集的线程使用了sleep正在休眠,等待下一次的采集一旦下一次的采集开始,还是会继续增长你说的下一次采集开始内存增长,但是在你给出的图表里,从15:20-15:40这段时间里的两次采集都没有出现大角度的上升情况
      

  3.   

    感谢回复!
    因为这个程序是每个一段时间采集一次,后面平稳是因为采集的线程使用了sleep正在休眠,等待下一次的采集一旦下一次的采集开始,还是会继续增长你说的下一次采集开始内存增长,但是在你给出的图表里,从15:20-15:40这段时间里的两次采集都没有出现大角度的上升情况感谢回复!
    十分不好意思,是我个人偷懒了,这个图是我把循环取消之后测试的,目的是看只采集一次的情况下,虚拟机能否把多出来的那些资源回收掉,结果等了很长时间也没有回收,不好意思,我的懒惰造成了您的误解!
      

  4.   

    应该是HashMap放入了数据,没有remove,导致的内存泄露
      

  5.   

    首先你是个网页程序,那个class loader是tomcat用来加载你的网页程序的,所以在你程序里所有占用的内存最终都会反映到那个class loader上面去。于是乎它是最大的占用者,但这没有意义。你在代码里面搜索"new"关键字,看看这些新建的对象都到哪里去了。这可能是个大工程,不过对你理解熟悉代码很有帮助
      

  6.   

    用JDK自带的jmap(bin目录下)查看当前进程里面每个对象的占用情况,然后截图发出来看看。jmap用法自己查。
      

  7.   

    从图形中看不出什么地方有内存泄漏啊?一个 Java Web 应用(含 Servlet 容器)占用 1GB 的内存是正常的。
      

  8.   

    非常感谢以上各位的回答!!
    我是LZ,问题已经解决了,我将程序重新写了一遍,每写一部分就测试一下,结果发现问题出现在hibernate持久化部分,具体就是SessionFactory开启太多导致的。SessionFactory是一个重量级单位,所以只实例化一次就好了。改完之后,程序只占很低的内存,而且采集的效率也上升了!说到底还是自己的学习不到位,再次感谢各位的回答!