IMO, the best way to investigate your problem is to perform a large amount of requests and took a heapdump. You analyse the heapdump with Memory Analyzer You open the "Histogram" view You add the column "Retained Heap" You sort on "Retained Heap" column.
Now you have a better view of the object and memory repartition. You can find the origin of different objects with a right click > List objects > with incomming references.
You can add a screenshot to have more help.