Michael Juntao Yuan, and Dave Jaffe have
published an article on OnJava.com detailing the process of scaling enterprise Java applications on 64-bit multi-core x86 servers. As chip makers such as AMD and Intel transition from faster megahertz per chip to more cores per processor, performance gains will be harder to achieve for traditional single threaded applications. They mention that servers such as Dell's PowerEdge 1955 blade which supports up to two 64-bit dual core processors in a blade configuration. The article points out that to take advantage of such systems applications must not only support multiple concurrent threads of execution but also be able to manage the large amounts of memory available to 64-bit processors. The article recommends a number of tips to help developers with this task such as:
- Tuning the JVM with Heap and Garbage Collection Arguments that Reflect The Amount of Memory Available.
- Leveraging Java 5.0 Concurrency Utils to Support Multiple Threads Easier
- Using NIO to Reduce I/O Blocking
Beyond low level Java solutions it is also proposed to collapse the tiers which your application runs on. Larger capacity machines may be able to handle both database and appserver tasks for instance reducing items such as network load that would be present with multiple machines. Virtualizing the hardware can also allow administrators to run several JEE application servers in contained environments on the same hardware thus using it more effectively.
Intel is rolling out quad-core processors this fall with the goal of 32 cores by 2010. Sun's Niagra II chips slated for release during the third quarter of next year will have 8 cores and support for up to 64 threads. With this explosion in cores it also seems likely that companies such as Intel and Sun will need to create compiler-driven parallelism to transparently multi-thread common thread-safe operations under the hood in the platform layer of languages like Java.