Может ли обманывать диспетчер задач о количестве памяти? (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 (ну или что-то еще, я пока не смог понять что именно) и может быть там тоже идут какие-то манипуляции с памятью.


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


Ответы (0 шт):