参考:http://blog.sina.com.cn/s/blog_3f12afd00100zpvf.html
tomcat7 正式环境的优化
http://energykey.iteye.com/blog/2072797
tomcat内存配置优化
http://blog.youkuaiyun.com/kefeng824/article/details/31742423
CentOS 6.5 下的tomcat优化
http://www.cnblogs.com/littlehb/archive/2013/04/02/2994785.html
JVM(Java虚拟机)优化大全和案例实战--(重点推荐)
http://blog.youkuaiyun.com/kthq/article/details/8618052
http://blog.youkuaiyun.com/funchs/article/details/50978576 (tomcat7 优化)
http://www.cnblogs.com/linux130/p/5912510.html (tomcat7 优化配置)
https://yq.aliyun.com/articles/60757 (Tomcat 7优化配置参数)
http://blog.youkuaiyun.com/gif_t_t/article/details/50802748 (Tomcat 7优化前及优化后的性能对比)
http://www.cnblogs.com/dsc65749924/p/6081432.html
Xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的快一点,但是也可能会导致机器暂时间变慢。
Xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常。
Xss 是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程大约需要占用多少内存,可能会有多少线程同时运行等。
以上三个参数的设置都是默认以Byte为单位的,也可以在数字后面添加[k/K]或者[m/M]来表示KB或者MB。而且,超过机器本身的内存大小也是不可以的,否则就等着机器变慢而不是程序变慢了。
-
-Xms 为jvm启动时分配的内存,比如-Xms200m,表示分配200M
-
-Xmx 为jvm运行过程中分配的最大内存,比如-Xms500m,表示jvm进程最多只能够占用500M内存
-
-Xss 为jvm启动的每个线程分配的内存大小,默认JDK1.4中是256K,JDK1.5+中是1M
Total Memory | -Xms | -Xmx | -Xss | Spare Memory | JDK | Thread Count |
1024M | 256M | 256M | 256K | 768M | 1.4 | 3072 |
1024M | 256M | 256M | 256K | 768M | 1.5 | 768 |
上面的表格只是大致的估计了下在特定内存条件下可以在java中创建的最大线程数。随着-Xmx的加大,空闲的内存数就更少,那么可以创建的线程也就更少,同时在JDK1.4和1.5版本不同下,可创建的线程数也会根据每个线程的内存大小不同而不同。
其实只要我们了解了JVM的内存大小指定以及java中线程的内存模型,基本上我们就可以很好的控制如何在java中使用线程和避免内存溢出或错误的问题了。
最近在网上看到一些人讨论到java.lang.Runtime类中的 freeMemory(), totalMemory(), maxMemory()这几个方法的一些问题,很多人感到很疑惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着java程序往前运行,创建了不少的对象,freeMemory()这个方法的返回有时候不但没有减少,反而会增加。这些人对 freeMemory()这个方法的意义应该有一些误解,他们认为这个方法返回的是操作系统的剩余可用内存,其实根本就不是