JFluid is an experimental profiling tool that can instrument and de-instrument Java code on-the-fly, while the profiled application is running. This is due to a special capability in the modified version of HotSpot JVM 1.4.2 that JFluid uses. A similar feature is available in only one other JVM - BEA JRockit. However, unlike the JRockit VM console, our tool not just instruments individual methods dynamically, but can reveal, instrument and profile a whole call subgraph, starting from a single method selected by the user. We currently support both CPU and memory (object allocation) profiling.

Dynamic and selective code instrumentation results in very substantial performance overhead reduction, and thus increased scalability. In particular, our users report that they can profile J2EE/Web, or just large, heavily multithreaded homegrown apps, for which tools such as JProbe or OptimizeIt, just hang or crash. See our web page (http://research.sun.com/projects/jfluid) and also the JFluid RFE web page (http://developer.java.sun.com/developer/bugParade/bugs/4879835.html) for more information.

In this version, there are numerous usability improvements, including:

* Supported platforms: Solaris-SPARC, Solaris-x86, Linux, and Windows
* Support for multiple instrumentation roots that persist across sessions.
* Option to aggregate CPU profiling results over all profiled threads.
* Reverse call graph for any profiled method can be displayed (no problem now to find all callers for that damn bottleneck method :-))
* Results export in CSV (comma-separated values) format feature.
* Improved robustness due to internal design changes and bug fixes.

Yor feedback is very welcome.