В 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