The Foundation - JFluid Technology

The JFluid technology has been under development at Sun Labs for the last two years to address several
shortcomings of existing conventional profiling technologies. One fundamental drawback of the existing
tools is: the more information they provide, the higher is the overhead that the profiled application
suffers from. Thus, for example, if a production application that ran well for a while, suddenly starts to
misbehave, it is usually impossible to diagnose it in depth on the spot, because the overhead of this
diagnostics would be unacceptable. However, reproducing the same problem in the lab may be very hard, if
possible at all.

A high overhead may be a problem when doing development-time profiling as well. For example, the tool's
overhead may force you to wait for hours before your application gets to the point where interesting things
start to happen.

The JFluid technology addresses this issue by providing a mechanism in the JVM(tm), which allows the user to
turn profiling on and off at any time, and, equally important, to profile just a small subset of the code,
that they are currently interested in. The profiled subset of the code and the type of profiling (CPU, memory,
etc.) can be changed at any moment at run time. This is achieved mainly through dynamic bytecode
instrumentation - a functionality in the JVM that allows tools to inject and remove additional bytecodes
right into running Java program. Additional bytecodes don't change the program semantics, but emit events,
such as method entry and exit, object allocation, etc., which the tool collects and analyses, ultimately
giving the user the picture of what's happening inside their application.

The technology further allows one to attach the tool to the running JVM (that was started without any special
options or switches), profile or debug the application (this usually incurs some overhead), and then detach
the tool, letting the application run at full speed, as before.