В Java можно ли увеличить доступную память JVM и/или убить другие Java-программы?
Я неопытный с продвинутой Java, поэтому, пожалуйста, несите меня.
Мне интересно, как Java может реализовать функции, которые можно назвать "автономными". Скажем, у нас есть две Java-программы. И одна из программ определяет, что другая является защитой памяти и, таким образом, убивает эту программу и/или выделяет больше памяти для JVM.
Я знаю, что на Java вы можете видеть, что имеется в наличии (см. Как проверить использование процессора и памяти в Java?), но что, если мы хотим копать глубже?
Спасибо.
Ответы
Ответ 1
Вы спросили: возможно ли увеличить доступную память JVM и/или убить другие Java-программы?
-
Да Возможно. Вы можете увеличить размер кучи jvm
, например:
java -Xmx512M ClassName //512M = memory you want to increase
-
Чтобы убить процесс, например: taskkill /F /IM <processname>.exe
Примечание
- > но это не очень хорошая идея, потому что куча может иметь фиксированный размер или может быть расширена в зависимости от политики сборщика мусора.
- > открыть тип командной строки taskkill/?
, чтобы узнать подробности.
3. И вы можете проверить общую память, свободную память и максимальную память, зарезервированную в настоящее время jvm
таким образом.
int MegaBytes = 1024*1024 ;
long freeMemory = Runtime.getRuntime().freeMemory() / MegaBytes;
long totalMemory = Runtime.getRuntime().totalMemory() / MegaBytes;
long maxMemory = Runtime.getRuntime().maxMemory() / MegaBytes;
System.out.println("Memory used by JVM: " + (maxMemory - freeMemory));
System.out.println("freeMemory in JVM: " + freeMemory);
System.out.println("totalMemory in JVM : " + totalMemory);
System.out.println("maxMemory in JVM: " + maxMemory);
Для получения дополнительной информации пожалуйста, ознакомьтесь здесь.
Ответ 2
1. Увеличение памяти для JVM
Вы можете указать начальный и максимальный размер кучи в Java, используя следующий код.
java -Xms64m -Xmx256m ...
в этом
-Xms<size> specifies the initial Java heap size
-Xmx<size> the maximum Java heap size.
2. Проверка того, сколько памяти в вашей программе использует
Существует очень удобный инструмент, который предоставляется вам при установке jdk на вашем компьютере, который показывает, сколько памяти, пустое место для всех запущенных java-программ при захвате вашего компьютера.
Java Visual VM
http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/
вы можете найти его в папке установленного bin в jdk.
Предыдущее сообщение stackoverflow также должно помочь
Контроль использования собственной памяти с помощью приложения Java
Ответ 3
Что касается "вегетативной" части вашего вопроса, то на самом деле можно управлять процессом с помощью Java, хотя и ограниченным:
-
Предполагая, что все обрабатываемые процессы всегда будут
началось с вашего приложения Java, используя
ProcessBuilder.start()
, вы можете использовать destroy()
метод в процессе, который вы хотите убить. Подробнее см. .
-
Обнаружение, когда процесс имеет слишком много памяти, подразумевает возможность
собирать информацию о процессе. Проблема в том, что информация
могут быть доступны только операционной системе. Неизбежно, у вас будет
использовать какой-то командный или сторонний инструмент для его получения. Для
дополнительную информацию, посмотрите этот другой ответ.
-
Хотя смутно связаны, выключение крючки позволяет вам делать некоторые
критические задачи автоматически, когда приложение закрывается. Для
экземпляр, сохранение/закрытие любого документа (ов)/файлов (файлов) остается открытым. Ты можешь
подробнее в этом ответном ответе.
Надеюсь, что это поможет.
Ответ 4
Вы можете попробовать добавить -XmsMBm при попытке запустить программу.
например java -Xms64m ClassName