我在tomcat中System.gc()之后
Runtime.getRuntime().totalMemory()
的大小没有变小啊.
如何缩小Runtime.getRuntime().totalMemory()这个东东.
谢谢了.

解决方案 »

  1.   

    你并不能强行控制jvm什么时候回收垃圾,可以参考think in java中的相关章节
      

  2.   

    Runtime.getRuntime().totalMenory()的返回值是当前JVM可用来给当前对象使用,或者为以后对象分配内存空间的总量。这个值和当前内存中有多少对象没有关系。就好比一个桶,你装半桶水它的容积是5升,你倒掉一部分水它的容积还是5升。
    如果你想看到gc的效果,你可以使用freeMemory()。当有效的gc之后(确实有对象需要gc),freeMemory的返回值比之前增大了。
      

  3.   

    另外,也有办法改变totalMemory的大小。对于使用java运行的程序,在java后面附带参数:
    -Xms<initial memory> -- 初始化的内存大小
    -Xmx<maximum memory> -- JVM的最大可用内存比如:
    java -Xms600k -Xmx800k HelloWorld
    指jvm的初始化内存是600k,最大neicun800k
    不过这一命令无法执行,因为设置的内存太小了。打印一句"hello world",我在editplus上使用
    java -Xms1000K HelloWorld
    时才可以运行。java -Xms2M -Xmx64M HelloWorld
    最小2M,最大64M,这是java的默认值。tomcat上也有设置最大最小的方法,好像是server.xml里面,可以对Web应用配置大小。我对Web了解不多,就不罗嗦了。