公司的程序,运行时内存一直增加不释放。我用JProfiler 和JConsole检测了内存情况,使用还算正常。监控到内存会自动GC
而且保持在500M used,400M free 的情况,但是windows中线程管理中看到的却是1.6G的内存占用,而且使用那些工具手动GC
系统使用的内存变成 20M used ,800m free 。可是windows中线程管理中看到的还是1.6G。请问这是怎么回事?该怎么调整呢。时间久了会报内存溢出。

解决方案 »

  1.   

    你说的这些现象,不是主要问题。因为Windows中看到的是JVM的总内存消耗。而JConsole工具看到的则是JVM内部对这些内容的使用情况。这两者本来就不同。
    内存溢出是主要问题,但你说的这些现象对帮助分析内存溢出没意义。
    请继续使用工具来监控JVM,定义执行GC,然后检查哪些对象在每次GC之后持续增长。也就是GC并不能回收且持续增长的对象;这才是重点。
      

  2.   


    程序使用了内存之后,gc之后jvm中变小,操作系统线程中看到的内存永远不会变小吗?java占用了之后不会再释放给操作系统了吗?
      

  3.   

    myeclipse用了半天,内存使用就有600mb了,然后关掉在重新启动,就少了很多。。