最近有个项目, 需要占用较大的内存.     所以在启动参数里设置
"-Xms100M   -Xmx1024"   XMS:是指最小内存占有?  Xmx:是只最大吧?
硬件 :4GB内存 ,未打开该项目程序占用420MB, 启动程序  初始化时到520MB, 在开始运行的10分钟内,内存回收效果较好,控制在580~650之内。 但10分钟后,内存回收效果好像就自动失效. 内存直线上升 1分钟内 就达到1.3GB。然后就报内存溢出。 但后 删除 "-Xms100M   -Xmx1024"    这行参数.  程序初始化时  450 左右。 然后一直控制在480~500之内。  持续运行了2个小时 内存还在稳定的控制范围内。 所以我有几个疑问 : 
                 1 java 应用程序  默认 可以占用系统最大内存多少? 在windows环境下。                  2 由于该项目的确需要 较大的内存最为缓存空间    我想控制在1GB左右。  参数应该如何设置。 才不会影响到内存回收, 失效的问题。                 3 在作为产品发布时, 需要如何测试程序的内存控制。 达到稳定的效果。

解决方案 »

  1.   

    你确定不是tomcat JVM设小了?1.eclipse.ini:  -Xms256m -Xmx1024m  这个最大内存,一般是根据项目的需要和硬件配置来的,最大不能超过物理内存
    2。tomcat的jvm设置:-Xmx1024M -Xms512M -XX:MaxPermSize=256m 配置tomcat的目录下JDK那里
      

  2.   

    32位系统的JVM一般最高能到1G,64位的没什么限制
      

  3.   

    "-Xms100M -Xmx1024"是设置MyEclipse占用的内存的,不能设置的太大
      

  4.   

    -Xms100M,虚拟机初始化内存
     -Xmx1024,虚拟机最大内存
    建议你看看java的帮助文件,里面都有你的现象是个典型的java内存泄露问题,你的程序里有个全局的变量持有你动态创建的对象的引用,这样gc就没法回收内存,找到这个全局变量,发你不需要的对象的引用设置成null。或者有另外一种情况,你需要分配大量内存,那么请把 -Xmx1024,配的更大一些,但32bit最大也就1.4g,使用java -version -xms1500m测试一下
      

  5.   

    很显然你的应用程序有memory leak的问题!
      

  6.   

    一 10分钟后你的程序做了什么?
    1,我程序就一直在循环。 10分钟与10分钟前完全一致.  
    2, 如果我不设置 "-Xms100M -Xmx1024"  采用默认运行, 就不会碰到内存溢出~!! 这个问题很关键? 是为什么?二 我利用的是先进先出的集合(QUEUE.POLL 会自动)。 一直在做自动清理的。三 java在 windows平台 正确 设置内存大小的方式是什么? 
      

  7.   

    1 开启JMX功能,然后使用JConsole看下内存使用情况,是否有死锁2 使用JProfiler工具启动你的程序,动态分析下那些对象占用内存最大3 只设置-Xmx1024,不设置-Xms100M试试
      

  8.   

    嗯,我可以结了  设置成-Xmx800  就好了  悲剧的1024 就不行,  大概是我eclipse bug。 感谢大家对内存的探讨.