Yes. The way I did this was to configure jvm to create a dump heap in OOM, then I pulled out a bunch and ran it through jvisualvm. You can calculate the saved sizes (it takes a lot of time), but it will be very clear what the intruder is.
You can also connect jvisualvm to the running instance, but you need to configure jvm to accept the connection. Thus, you can observe how the heap grows in real time. To see it; its for jboss but it should be very similar: https://wiki.projectbamboo.org/display/BTECH/VisualVM+Profiler
I think it’s easier to get an answer after you have a bunch of heaps, although when you watch it in real time, everyone collects trash and something else.
EDIT - these are my configurations to run.
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-Xloggc:/path/to/memlogs/memlog.txt -XX:+PrintTenuringDistribution
-Xms1024m -Xmx2048m -XX:MaxPermSize=128m
-server -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=xxxx
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=<ip-address> -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/to/heapdumps/ -XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled -XX:+UseConcMarkSweepGC
, , memlog.txt , , . jvm, , , , , , , , ...