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.
Now incorporated in the NetBeans