1. NIO
使用JDK1.4中提供的New IO来处理多连接的情况,用以取代旧有的一客户端一线程的IO模型。
NIO能提高服务器性能的关键在于NIO给JAVA提供了非阻塞的IO模型。以前需要用一个线程来等待用户的数据,现在只需要用select“选择”出ready(就绪)的socket,然后在有数据的时候才去读。这样能够用很少的几个线程同时向大量的连接用户提供服务,免去了线程切换带来的开销。
2. Thread Pool (SEDA)
把你的服务器的处理过程分解为Stage,给每个Stage配以一个线程池来并发处理Event。Stage之间通过Event来互相转换。
SEDA的秘诀在于总的来说,并发是有好处的。通过把服务器的处理过程分解为Stage,提高了服务器的模块性。同时给每个Stage配置一个自己的线程池来处理它的事件,能够精致调整其池的大小,决定这个Stage的并发性。虽然SEDA的创始者把他写的SandStorm写得n复杂,但是SEDA本身的思想很简单,利用JDK1.5提供给我们的良好线程支持,百来行代码就能实现一个SEDA的模型出来。
3. StAX
使用StAX来代替DOM或者SAX。流式的XML解析能够消耗更少的内存,而且速度更快。
DOM很耗费内存,需要性能的地方肯定不能考虑。SAX很庞大肥硕,比起Pull式的流式Parser来,还是慢。StAX是Pull式流式Parser标准化的产物,04年已经是final了的jsr。现在有一个BEA提供的RI,使用APL协议。服务器实现的一般是协议式的东西,往往是以流为中心,而不是以文档为中心,而且往往需要自己控制着parser去解析,使用StAX最适合不过了。
4. Javolution
在大量产生临时内存的地方,而且是反复被使用的部分,使用Javolution实时框架来“精致地”管理内存。
5. In general
好的内存管理与恰当的并发是使得程序性能更好负载能力更强的关键。