Java 堆是指在程序运行时分配给对象生存的空间。通过-mx/-Xmx 和-ms/-Xms 来设置起始堆的大小和最大堆的大小。根据自己 JDK 的版本和厂家决定使用-mx 和-ms 或-Xmx 和-Xms。Java 堆大小决定了垃圾回收的频度和速度,Java 堆越大,垃圾回收的频度越低,速度越慢。同理,Java 堆越小,垃圾回收的频度越高,速度越快。要想设置比较理想的参数,还是需要了解一些基础知识的。 Java 堆的最大值不能太大,这样会造成系统内存被频繁的交换和分页。所以最大内存必须低于物理内存减去其他应用程序和进程需要的内存。而且堆设置的太大,造成垃圾回收的时间过长,这样将得不偿失,极大的影响程序的性能。以下是一些经常使用的参数设置: 1) 设置-Xms 等于-XmX 的值; 2) 估计内存中存活对象所占的空间的大小,设置-Xms 等于此值,-Xmx 四倍于此值; 3) 设置-Xms 等于-Xmx 的 1/2 大小; 4) 设置-Xms 介于-Xmx 的 1/10 到1/4 之间; 5) 使用默认的设置。 大家需要根据自己的运行程序的具体使用场景,来确定最适合自己的参数设置。 除了-Xms 和-Xmx 两个最重要的参数外,还有很多可能会用到的参数,这些参数通常强烈的依赖于垃圾收集的算法,所以可能因为JDK 的版本和厂家而有所不同。但这些参数一般在 Web开发中用的比较少,我就不做详细介绍了。在实际的应用中注意设置-Xms 和-Xmx 使其尽可能的优化应用程序就行了。对于性能要求很高的程序,就需要自己再多研究研究Java 虚拟机和垃圾收集算法的机制了。可以看看曹晓钢翻译的《深入Java 虚拟机》一书。 Java程序性能调优的基本知识和 JDK调优 一 基本知识 1.1 性能是什么 在性能调优之前,我们首先来了解一下性能是什么?关于性能,我想每个学习过 Java的人都能列出几点,甚至可以夸夸其谈。在《Java TM Platform Performance》一书中,定义了如下五个方面来作为评判性能的标准: 1) 运算的性能——哪一个算法的执行性能最好? 2) 内存的分配——程序运行时需要耗费多少内存? 3) 启动的时间——程序启动需要多长时间?这在Web项目中的影响不大,但要注意部分程序需要部署或运行在客户端时的情形(比如 applet 程序)。 4) 程序的可伸缩性——在压力负载的情况下,程序的性能如何? 5) 性能的感知——用户在什么情况下会觉得程序的性能不好? 以上五个方面,在具体的使用场景可以有选择的去评判。至于这五方面的性能调优,在后续的章节...