Practical guidelines for boosting Java server performance
JAVA '99 Proceedings of the ACM 1999 conference on Java Grande
A real-time garbage collector based on the lifetimes of objects
Communications of the ACM
A generational mostly-concurrent garbage collector
Proceedings of the 2nd international symposium on Memory management
Exploiting prolific types for memory management and optimizations
POPL '02 Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
OOPSLA '01 Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Java Platform Performance: Strategies and Tactics
Java Platform Performance: Strategies and Tactics
Generation Scavenging: A non-disruptive high performance storage reclamation algorithm
SDE 1 Proceedings of the first ACM SIGSOFT/SIGPLAN software engineering symposium on Practical software development environments
Java server performance: a case study of building efficient, scalable Jvms
IBM Systems Journal
Dynamic object sampling for pretenuring
Proceedings of the 4th international symposium on Memory management
On the Prediction of Java Object Lifetimes
IEEE Transactions on Computers
ACM Transactions on Programming Languages and Systems (TOPLAS)
Pretenuring in Java by Object Lifetime and Reference Density Using Scratch-Pad Memory
PDP '07 Proceedings of the 15th Euromicro International Conference on Parallel, Distributed and Network-Based Processing
Towards intelligent analysis techniques for object pretenuring
Proceedings of the 5th international symposium on Principles and practice of programming in Java
Proceedings of the 6th international symposium on Memory management
Garbage collection: Java application servers' Achilles heel
Science of Computer Programming
Investigating the effects of using different nursery sizing policies on performance
Proceedings of the 2009 international symposium on Memory management
Allocation wall: a limiting factor of Java applications on emerging multi-core platforms
Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications
WebSphere connector architecture evolution
IBM Systems Journal
Designing WebSphere application server for performance: an evolutionary approach
IBM Systems Journal
IISWC '09 Proceedings of the 2009 IEEE International Symposium on Workload Characterization (IISWC)
Hi-index | 0.01 |
In this paper, we consider scalability problems for a Java-based Web server running on a CMP (chip multiprocessor). We found that the performance of the Web server scaled poorly as the number of threads increased, even though the CPUs were not fully utilized. Searching for the causes of this scalability problem, we found that the normal use of the Web server was a poor fit to the object lifetimes a JVM expects. A relatively small fraction of objects that were long-lived but not permanent resulted in frequent scans of all of the live objects. They increased not only the load on the CMP but also the number of Web responses that failed to meet the response time criteria for the server. In addition, we found that the performance of the GC scaled poorly as the number of parallel GC threads increased in the CMP. The long-lived objects tax the CMP, and this is emerging as a general problem for CMPs running Java-based Web servers. To address the problem, we used object pooling for these classes to recycle the instances rather than cycling the memory through the GC. We achieved a 48% improvement in the scalability with this object pooling. We also improved the throughput by 9% by using object pooling for large short-lived objects, even though object pooling is not recommended for use in modern JVMs. We show which data classes affect the GC overheads based on the detailed analysis of object lifetimes. We also show that thread affinity is important for the object pools of these classes.