Вопрос по jvm-arguments, eclipse, jvm, memory, java – заставить jvm вернуть собственную память [duplicate]

7

This question already has an answer here:

JVM sending back memory to OS [duplicate] 3 answers

Время от времени я выполняю задачи по затмению, которые требуют очень большого объема памяти. Итак, jvm во время выполнения задачи проглатывает около 2-3 ГБ ОЗУ, это нормально. Но как только jvm занял эту память, он не освобождает ее, и у меня возникает ситуация, когда используемая память в куче составляет около 200 МБ с общим размером кучи около 3 ГБ, и это действительно нежелательно, поскольку другие программы испытывают недостаток памяти.

Я старалсяMax/MinHeapFreeRatio параметры, чтобы заставить jvm уменьшить потребление неиспользуемой памяти. Это мое затмениеconfig.ini файл:

-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-vm
c:/Program Files/Java/jdk1.6.0_26/bin/javaw.exe
-showlocation
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Duser.name=Michael Nesterenko
-Dosgi.requiredJavaVersion=1.5
-Xms512m
-Xmx4096m
-XX:MinHeapFreeRatio=10
-XX:MaxHeapFreeRatio=30

Но это не помогает, у меня все еще есть ситуации, когда много неиспользуемой памяти.

Целесообразно ли иметь два разных ярлыка / сценария оболочки для запуска Eclipse с разными наборами параметров для случаев, когда вам приходится выполнять задачи, требующие большого объема памяти? matt freake

Ваш Ответ

1   ответ
4

Java выделяет максимальный размер кучи при запуске в качестве виртуальной памяти. Поскольку он использует память, он выделяется как реальная основная память. Это никогда не сжимает этот размер. Единственный способ освободить эту память - выйти из программы.

Java сократит использование памяти, поэтому многие страницы, которые она использовала ранее, могут быть перенесены на диск, однако это может привести к значительному снижению производительности, если они снова понадобятся.

Я не согласен. Память может сжиматься. Из этого документа (oracle.com/technetwork/java/javase/tech/…): -XX:MaxHeapFreeRatio=70 Maximum percentage of heap free after GC to avoid shrinking. Это означает, что если освободится более 70% кучи, куча будет уменьшаться. Также в соответствии с этим сообщением об ошибке (bugs.sun.com/bugdatabase/view_bug.do?bug_id=6498735) : The HotSpot JVM already will release memory back to the operating system if it is not needed for live Java objects.
@ alain.janinm Это коробка Windows 7 с 8 ядрами и 32 ГБ памяти (около 23 ГБ свободного места). Я полагаю, что при высоком свободном объеме памяти ОС может не забирать память, поскольку она не требуется.
На самом деле виртуальная память не является проблемой, она может быть любого размера, поскольку она является приватной. Мне нужно сократить рабочий набор процессов - это физическое использование оперативной памяти. michael nesterenko
Используемая куча будет уменьшаться, а размер резидентного приложения - нет.I don't know what the bug reviewer is talking about either. I've NEVER seen the Virtual Memory footprint shrink.
Я нахожу, что между оптимизациями, которые должна делать JVM, и тем, что вы действительно находите, существует определенная зависимость. Примером является анализ побега. В теории это может удалить много создания объекта, но в действительности очень трудно найти пример, где это происходит.

Похожие вопросы