Method-level phase behavior in java workloads
OOPSLA '04 Proceedings of the 19th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Javana: a system for building customized Java program analysis tools
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
VCR: Virtual Capture and Replay for Performance Testing
ASE '08 Proceedings of the 2008 23rd IEEE/ACM International Conference on Automated Software Engineering
Evaluating the accuracy of Java profilers
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
Dynamic profiling-based approach to identifying cost-effective refactorings
Information and Software Technology
Decision support via automated metric comparison for the palladio-based performance blame analysis
Proceedings of the 4th ACM/SPEC International Conference on Performance Engineering
Hi-index | 0.00 |
Instrumentation-based profiling provides a number of benefits, but can also cause high performance overhead. The negative impact of this overhead could be mitigated considerably if only a small part of the target application (e.g. one that has previously been identified as a bottleneck) is instrumented, possibly for a short time only, while the rest of the application code runs at full speed. In this paper we present an experimental profiling system called JFluid, which includes a modified Java/spl trade/ VM and a GUI tool, and addresses both of the above issues. Our tool supports dynamic instrumentation of a group of methods defined as an arbitrary "root" method plus all methods that it calls (a call subgraph). Methods that belong to a call subgraph are revealed and instrumented lazily, to minimise the number of methods instrumented unnecessarily. Measurements that we obtain when performing full and partial program profiling show that the overhead can be reduced substantially using this technique, and that it is more beneficial when used for large server-side Java applications as opposed to small benchmarks.