我用的myeclipse6.0,运行的时候有一个javaw.exe,描述是Java(TM) 2 Platform Standard Edition binary,平时占150M左右内存,
当运行一个java应用的时候,又会多出来一个javaw.exe进程,描述是Java(TM) Platform SE binary,占用的内存越来越多,最后一直到了1个G,而我的运行参数是
-Xms128m -Xmx128m,最后的结果就是电脑的物理内存被占用99%左右的时候,程序报out of memory异常,java heap space。我用Jprofiler进行了测试,发现heap的垃圾回收一直很正常,占用的heap空间一直在0-128M之间不停摆动,应该没有问题,那么那个1G的内存是怎么消耗出来的呢?

解决方案 »

  1.   

    正常, 能比QQ占用内存多的就是Java了.
      

  2.   

    java运行内存占用应该和你程序有关系,在程序中java类new的越多消耗内存就越多,所以在写代码的时候不要滥用new
      

  3.   

    Javaw进程是标准Eclipse所用编译及运行Java程序时所用进程。由于Eclipse本身比较消耗资源,所以经常会导致该进程过度耗费资源。如果你用过调试程序运行server,你会发现有两个javaw进程存在,此类情况属于正常情况。根据以往使用WSAD的经验,不要轻易修改Eclipse的运行参数,除非你对操作系统特别了解。此类问题有可能是由于修改运行时参数导致,建议恢复默认参数。如果问题仍存在,可能是由于机器配置比较低。
      

  4.   

    不知道楼主说的运行参数 -Xms128m -Xmx128m 指的是前面那个 myeclipse6.0 的进程还是后面运行应用程序那个 javaw 进程?如果是后者的话,按说无论如何 javaw.exe 占用的内存不会一直涨到 1G,除非是虚拟机的 BUG。
      

  5.   

    运行参数 -Xms128m -Xmx128m 指的是运行自己编的应用程序的进程,那个虚拟机是用的MYECLIPSE6.0自带的。
    Jprofiler好像只能监控heap上的对象,反正我把上面所有对象占用的内存加起来算过也不过就120M左右
      

  6.   

    我用Jprofiler貌似没检测出内存泄露啊,不论是heap还是memory,用掉的内存加起来也不过就120M左右,那个图像视图里也是每次一接近128M的极限,GC就把垃圾回收了,一个个标准的三角形形状
      

  7.   

    你试下把这两个参数设大一点呢,并且只设这两个参数,比如:-Xms768M -Xmx768M
      

  8.   

    我把Jprofiler关了就没有这个问题了,看来是Jprofiler的原因,但是问题是程序运行到某个地方照样会out of memory,奇怪了,到底是怎么回事
      

  9.   

    估计是new得太多,如果有引用一直向对象,对象是不会被回收的。
    仔细看看代码吧。
      

  10.   

    JVM本身的GC机制并不好,适当应该调用System.gc进行强制处理。另外,在对象不使用的情况下,应该将对象置null
      

  11.   

    本来也不知道是什么原因,于是在网上搜了搜,直接将Myeclipse9.1换成了Myeclipse6.5,还有360浏览器也比较占用内存,所以将其也卸载了,换成了TT,现在感觉机器运行速度稍好一些,也不知道是由于将浏览器换了还是由于将Myeclipse换了的原因