Важно отметить, что «используемая общая память» (RSS на территории Linux) включает кучу JDK (+ другие области JDK), а также выделенную «родную память».
Например, эти люди обнаружил, что выделение слишком большого количества jaxbcontexts (которые связаны с родной памятью) между GC может заставить его использовать много дополнительной ОЗУ. Другой распространенный, по-видимому, ZipInflater, если вы не вызываете его близко (или GZipStream и т. Д.)
http://sleeplessinslc.blogspot.com/2014/08/jvm-native- memory-leak.html
. Его последнее решение об обходе / исправлении было более «GC» чаще всего (с помощью сборщика мусора GC1 или указав меньший [иронически] -Xmx) или путем кэширования объектов JaxBContext (поскольку у них нет метода close, поэтому вы не можете контролировать утечку).
Также обратите внимание, что иногда вы можете найти виновников памяти, просто изучив jstack: http://javaeesupportpatterns.blogspot.com/2011/09/jaxbcontext-performance-problem-case.html
Иногда также возможно «пропустить» закрытие, например, GZipStreams случайно http://kohsuke.org/2011/11/03/quiz-time-memory-leak-in-java