你分配了最大允许内存,但JAVA不一定直接使用那么多哦!也许当前就是60M呢,随着程序的运行,应该会逐步增加的
maxMemory(); 你运行看看,是不是有用!

解决方案 »

  1.   

    我晕,我测试的结果  public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().totalMemory());
        System.out.println(Runtime.getRuntime().maxMemory());
      }JVM 参数
     -Xms256m -Xmx256m运行结果
    266403840
    266403840竟然是全部的分配的内存!!!!
      

  2.   

    maxMemory() == 1g,这个显示的是正常的usedMemory:   61.63 MB 
    totalMemory: 84.50 MB 
    maxMemory: 986.12 MB 这是目前我机器的情况我关心的是,usedMemory不短的达到totalMemory,然后是否会进行频繁GC?
    totalMemory比maxMemory小这么多是否正常?
    能不能totalMemory和maxMemory一样?
      

  3.   

    你那个 -J-Xmx1024m 是啥啊?我还真没注意,标准JVM参数是没有-J的
      

  4.   

    啊,我是resin的启动脚本,直接贴过来了,实际和-Xmx1024m 是一样的,-J是resin启动脚本传递给JVM的参数.
    你是否方便测试一下你的tomcat或者resin在使用过程中,totalMemory和maxMemory是否是一样的?
      

  5.   

    晕,我的windows系统下和linux下的都是totalMemory和maxMemory不相等.
    谢谢帮忙测试,结贴事我会算好分的 :)
      

  6.   

    我的也是不相等的:
    totalMemory:   4194304
    maxMemory:     1072914432老紫竹的两个相等的原因是这两个参数相等-Xms256m -Xmx256m,可以使这改为-Xms64m -Xmx256m应当就不会相等了。totalMemory表示当前jvm正在占用的内存有多大,而maxMemory表示jvm最大可占用的内存有多大,所以一般maxMemory会大于totalMemory,如果两者很接近,怎应用程序的性能可能会比较差因为垃圾回收的缘故
      

  7.   

    楼上,问题是我设置了
    -Xms1024m   -Xmx1024m现在的情况是,resin刚启动 totalMemory和 maxMemory是相等的
    但是totalMemory会自己不断的减少
    程序运行2,3天后,就变成了:usedMemory:       61.63   MB   
    totalMemory:   84.50   MB   
    maxMemory:   986.12   MB   
    totalMemory和maxMemory的差距变得很大
    但程序跑的仍然很好,我没开gc日志,不知道这种情况是否正常,为什么totalMemory会自己变少.
    PS:我程序目前用得内存是比较小.
      

  8.   

    不知道resin刚启动totalMemory和maxMemory是多大?都是1G吗?
      

  9.   

    对,刚启动的时候都是1g,两者是相等的
    但运行一会totalMemory就开始逐渐减少了.
      

  10.   

    你先把这个-Xms1024m调低到-Xms256m再试试看