java - another question about Process

stat5257402

у меня ворос про Process.
создал один Process так,
Process proc=null;
try{
proc = Runtime.getRuntime.exec("c:\\a.exe");
}catch(IOException e){}
вопрос состоит в том, что дописать программу чтобы выполнить следующие требования:
1)выводить объем памяти , который process 'a.exe' занимает при выполнении
спасибо.

otets-mihail

угога

stat5257402

?

kokoc88

выводить объем памяти , который process 'a.exe' занимает при выполнении
С ходу могу предложить только native код. Надо искать отцов java.

stat5257402

как решается проблема?

evgen5555

Методом синтеза усложненного кода

stat5257402

один предполагает решить эту проблем с помоьщю JNI
я не понял
почему использовать JNI ? затем
JNI просто разрешает java интерпритировать другие приложения и lib , написаные в других языках
как JNI решает эту проблему ?

kokoc88

как JNI решает эту проблему ?
Два ответа. JNI решает проблему не переносимо. JNI позволяет вызывать код на Си, в котором будет вызов, например, WinAPI, который позволит узнать количество памяти, отожранное процессом.

Svyatogor

Правильно в принципе предложили использовать JNI. Java все-таки кроссплатформенная среда, поэтому в ней очень мало средств для взаимодействия со средой, а если такие средства появляются - то только при реальной необходимости. Тот же java.nio.* появился только в 1.4 (там есть отображения файлов в память, буфферы и т.п.) Ну а определение памяти, занятой другим процессом - задача достаточно специфическая и редкая (мало кому такая функциональность нужна).
JNI просто разрешает java интерпритировать другие приложения и lib , написаные в других языках
Не позволяет. С одной стороны, JNI позволяет реализовывать методы классов в виде таких библиотек (при этом именуются вполне определенным способом с другой - создавать виртуальную машину Java, создавать и вызывать методы классов. Произвольную библиотеку без создания обертки (wrapper) использовать нельзя.
Предложение использовать native код от и состояло в том, что надо создать класс с native-методом для получения необходимого объема памяти (кстати, память бывает разной ) после чего сгенирировать прототипы с помощью javah и реализовать необходимую библиотеку (*.dll, *.so после чего загрузить библиотеку и использовать описанный метод класса (native-метод).

stat5257402

почему не использовать
Runtime.freeMemory
Runtime.totalMemory

kokoc88

почему не использовать
Потому что эти методы возвращают память текущей виртуальной java машины. Ты вообще документацию читать пробовал?
Оставить комментарий
Имя или ник:
Комментарий: