![]() |
JProfiler has the capability to profile any JVM that has a minimum version of 1.6,
even if that JVM was not
started with the VM parameters for profiling. Through the use of the
attach API
that is present in Oracle/Sun JVMs, JProfiler can load the profiling agent on the
fly. There are two scenarios
for attaching to JVMs:
|
![]() |
The displayed name of a JVM is the main class of the profiled JVM together with its arguments.
For launchers generated by exe4j or install4j, the executable name is displayed.
If you wish to set the displayed name yourself, for example because you have several processes with the same main class that would otherwise be undistinguishable, you can set the VM parameter -Djprofiler.displayName=[name]. If the name contains spaces, use single quotes: -Djprofiler.displayName='My name with spaces' and quote the entire VM parameter with double quotes if necessary. In addition to -Djprofiler.displayName JProfiler also recognizes -Dvisualvm.display.name. |
![]() |
When the profiling agent is loaded for an attach session (either by the JProfiler
GUI or by
jpenable, the profiling agent did not have the chance to instrument classes when they were
loaded. Instead, it has to reload them which puts a burden on the PermGem space of
the heap.
Classes are not easily garbage collected and so the PermGem space has to support both
old and new versions of all reloaded
classes. If the PermGen space is to small for a particular application, you can increase
it with the VM parameter
-XX:MaxPermSize=128m.
When you choose "Dynamic instrumentation" as the method call recording type, it is important to choose profiled packages that focus on the classes of interest. In that way, relatively few classes are instrumented. Alternatively, you can choose Sampling in the profiling settings. If JProfiler detects that the PermGen space would be overloaded with the current filter settings, it will warn you in the session startup dialog. You should then switch to sampling or define narrow set of profiled packages. Clicking on the hyperlinks in the warning message will quickly make these changes. When selecting profiled packages, the total amount of instrumented classes is monitored and you are notified if you exceed the approximate maximum number of classes that can be instrumented. |
![]() |
Views that show information on recorded objects, such as the
Recorded objects view, the
Allocation call tree or the
heap walker allocations screen rely on instrumentation
of certain classes. Unfortunately, array allocations have to be instrumented at all
call sites. When the
profiling agent is present at startup, this is not a problem, but in attach mode,
a large fraction of all
classes has to be instrumented which might fail due to the limitations of the PermGen
space.
By default, array allocations are not recorded in attach mode, although the session startup dialog gives you the possibility to do so for "non-client" JVMs (the "client" JVM has a bug that prevents this from working successfully). |