Это может произойти, даже если нет утечки памяти (например, незакрытых zip-ресурсов).
Я столкнулся с той же проблемой. Это известная проблема с glibc> = 2.10
Лечение заключается в том, чтобы установить эту переменную env
export MALLOC_ARENA_MAX=4
Статья IBM о настройке MALLOC_ARENA_MAX
https://www.ibm.com/developerworks/community/blogs/kevgrig/entry/linux_glibc_2_10_rhel_6_malloc_may_show_excessive_virtual_memory_usage?lang=en
Google для MALLOC_ARENA_MAX или найдите его в SO, чтобы найти много ссылок.
Возможно, вы захотите настроить и другие параметры malloc для оптимизации низкой фрагментации выделенной памяти:
# tune glibc memory allocation, optimize for low fragmentation
# limit the number of arenas
# requires glibc >= 2.16 since there was a bug in
# MALLOC_ARENA_TEST parameter handling that cause MALLOC_ARENA_MAX not to work
export MALLOC_ARENA_MAX=2
# disable dynamic mmap threshold, see M_MMAP_THRESHOLD in "man mallopt"
export MALLOC_MMAP_THRESHOLD_=131072
export MALLOC_TRIM_THRESHOLD_=131072
export MALLOC_TOP_PAD_=131072
export MALLOC_MMAP_MAX_=65536
Вы можете вызвать встроенную функцию malloc_info для получения информации о распределении памяти. Вот пример использования JNA для вызова собственного метода malloc_info .