Может ли обманывать диспетчер задач о количестве памяти? (Java)
после запуска приложения, я смотрю в диспетчер задач: мое приложение java использует:
1 гб и 988 мб памяти.
Затем я пробую тоже самое, но через профилирование (NetBeans profiler) и вижу такую картину:
Примерно соотнеся цифры из NetBeans profiler, можно увидеть, что приложение занимает 1 гб (и примерно от 100 до 250 мб)
При этом, если попробовать воспользоваться таким тестовым кодом для обработки запроса (задействую Spring boot):
@GetMapping("/memory")
@ResponseBody
public String test2() throws InterruptedException, IOException, ParseException {
long usedBytes = Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory();
long usedKyloBytes = (usedBytes/1048576)*1000;
long usedMb = usedBytes/1048576;
String result = "Bytes: "+usedBytes+" Kb: "+usedKyloBytes+" Mb: "+usedMb;
return result;
}
то можно увидеть через браузер такие цифры:
Как я понял, они и говоря о том, сколько приложение задействует памяти.
Тем самым получается, что NetBeans profiler выдает данные 1 гб (примерно) и через тестовый запрос, мы видим тоже 1 гб (также примерно), а диспетчер задач выдает почти 2 гб.
Проделав такое несколько раз я заметил, что мои данные примерно в районе 1 гб, а данные диспетчера о моем приложении где-то 2 гб, там самым данные при любом случае отличаются в 2 раза.
Я понимаю, что это процесс java и внутри него запускается мое приложение, и могу допустить, что кроме приложения запускается еще jre (ну или что-то еще, я пока не смог понять что именно) и может быть там тоже идут какие-то манипуляции с памятью.
Подскажите может ли обманывать диспетчер задач о количестве памяти процесса? Как он может по другому подсчитывать память не же ли среда с профайлером? Помогите разобраться в этом вопросе, буду рад за любую информацию, заранее спасибо.


