Подтвердить что ты не робот

Общая память, используемая процессом Java и размером кучи

Я написал приложение, использующее Spring Batch. Я вижу с VisualVM, что размер кучи составляет около 22 МБ. Но когда я использую Process Explorer (в Windows), чтобы узнать, сколько памяти используется им, разница большая (Private bytes - 71560K и Working Set - 80388K). Как это объяснить? Каковы другие вещи, которые используют эту память?

Спасибо

4b9b3361

Ответ 1

не забывайте родное пространство (стек)! Куча только представляет объекты, потоки/примитивы занимают дополнительную память. Также AFAIK, как только процесс занимает память, даже если содержимое может быть собрано в мусор, оно время от времени не возвращается обратно в ОС. Кроме того, я не уверен в VisualVM, но Eclipse MAT показывает только кучу, которая является "текущей" (не будет сбора мусора, если GC был запущен в этот момент времени). Вы также можете посмотреть jstat.

Ответ 2

Существуют общие библиотеки, стек потоков, perm gen, прямая память, файлы с отображением памяти.

Однако JVM выделяет максимальный размер кучи при запуске. Используемое количество не имеет большого значения.