OOPSLA '87 Conference proceedings on Object-oriented programming systems, languages and applications
Optimally profiling and tracing programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
Adaptive optimization for self: reconciling high performance with exploratory programming
Adaptive optimization for self: reconciling high performance with exploratory programming
Exploiting hardware performance counters with flow and context sensitive profiling
Proceedings of the ACM SIGPLAN 1997 conference on Programming language design and implementation
A portable sampling-based profiler for Java virtual machines
Proceedings of the ACM 2000 conference on Java Grande
ICSE workshop on software visualization
ICSE '01 Proceedings of the 23rd International Conference on Software Engineering
Java Virtual Machine Specification
Java Virtual Machine Specification
Fragment class analysis for testing of polymorphism in Java software
Proceedings of the 25th International Conference on Software Engineering
An Information Exploration Tool for Performance Analysis of Java Programs
TOOLS '01 Proceedings of the Technology of Object-Oriented Languages and Systems
Selective compilation via fast code analysis and bytecode tracing
Proceedings of the 2006 ACM symposium on Applied computing
Controlled dynamic performance analysis
WOSP '08 Proceedings of the 7th international workshop on Software and performance
Grammar-driven generation of domain-specific language debuggers
Software—Practice & Experience
Unit Testing for Domain-Specific Languages
DSL '09 Proceedings of the IFIP TC 2 Working Conference on Domain-Specific Languages
A path to achieving a self-managed Grid middleware
Future Generation Computer Systems
THOR: a performance analysis tool for java applications running on multicore systems
IBM Journal of Research and Development
Hi-index | 0.00 |
Instrumentation-based profiling has many advantages and one serious disadvantage: usually high performance overhead. This overhead can be substantially reduced if only a small part of the target application (for example, one that has previously been identified as a performance bottleneck) is instrumented, while the rest of the application code runs at full speed. Such an approach can also beat scalability issues caused by a high volume of profiling information generated by instrumented code running on behalf of multiple threads. The value of such a profiling technology would increase further if the code could be instrumented and de-instrumented as many times as needed at run time. In this report we describe in detail the design of an experimental profiling system called JFluid, which includes a modified Java HotSpot™ VM and a GUI tool, and addresses both of the above issues. Our JVM™ supports arbitrary on-the-fly modifications to running Java methods, and can connect with a profiling tool at any moment, without any startup time preparation. Our tool collects, processes and presents profiling data on-line. To perform CPU profiling, it instruments a group of methods defined as an arbitrary "root" method plus all methods that it calls (a call subgraph). It appears that static determination of all methods in a call subgraph is difficult in the presence of virtual methods, but fortunately, with dynamic code hotswapping available, two schemes of dynamic call subgraph revelation and instrumentation can be suggested. Measurements that we obtained when performing full and partial program profiling using both schemes show that the overhead can be reduced substantially using this technique, and that one of the schemes generally results in a smaller number of instrumented methods and better performance, especially for large applications.