JMP - Java Memory Profiler JMP logo

users_guide [ps]
users_guide [pdf]
users_guide [lyx]

Current version: 0.51.1

Other versions jmp-0.51.1.tar.gz
jmp/0.18, gtk/1.2 

jmp.deb [0.48, i386]
jmp.deb [0.42, amd64]
jmp.deb [0.48, ppc]
jmp.dll [0.50.1]
gtk+/2.2.0 Win32

Old versions

Robert Olofsson


Depending on how you run jmp it takes between 1.5 and 20 times as long for the java program to complete. JVMPI is quite slow, enabling all events that jmp uses can make the program take up to 10 times as long.

There is a big difference between the available jvms, for example the IBM jvm has previously done a lot more inlining even when jvmpi was enabled causing it to be much faster for profiling.

The tests done here are artificial. You do not want to run with full profiling from the start. You do want to run with minimal profiling and when you have reached an interesting state turn on object tracing or method tracing.

Note that the testing done here is only an indication on how fast (or slow) jmp is, your milage may vary.

The standard test case for jmp is running the RabbIT proxy on localhost. And then time a wget for 31 standard url (jmp website) from the local webserver, like this:

robo@orc:~/src/RabbIT2 > java -Xrunjmp rabbit.proxy.Proxy & robo@orc:~/slask/hubba > export http_proxy=http://orc:9666/ robo@orc:~/slask/hubba > time wget -o ../logfile -i ../urls real 0m1.804s user 0m0.021s sys 0m0.071s

Timing table for this test under jmp/0.41 and RabbIT/2.0.29. Test machine is an AMD athlon 2.8 GHz. 512 MB RAM using Linux/2.6.4. Running debian/GNU linux unstable branch. The webserver is a standard apache/2.0.48
SUN 1.4.2_03SUN 1.5.0-beta1
Not using a proxy-0.1490.149
Without JMPjava rabbit.proxy.Proxy1.4101.431
JMP tracing objectsjava -Xrunjmp:nomethods,nogui rabbit.proxy.Proxy1.7171.804
Hacked JMP to time JVMPI overhead. Method tracing, immediate return. java -Xrunjmp:noobjects,nogui rabbit.proxy.Proxy2.8992.203
JMP tracing methodsjava -Xrunjmp:noobjects,nogui rabbit.proxy.Proxy4.0553.341
JMP tracing objects and methods, not showing guijava -Xrunjmp:nogui rabbit.proxy.Proxy4.4693.527
JMP tracing objects and methods showing guijava -Xrunjmp rabbit.proxy.Proxy4.8374.044

The test performes a number of operations:
SUN 1.4.2_03SUN 1.5.0-beta1
c_class_load 612 736
c_class_unload 3 3
c_object_alloc 72 318 69 040
c_object_move 8 79 20 994
c_object_free 42 503 54 247
c_thread_start 28 27
c_thread_end 15 15
c_method_entry 884 527 964 883
c_method_exit 884 496 964 853

Old results
Testing on jmp/0.14 and rabbit/2.0.16 can be found