Если строки Java неизменяемы, а StringBuilder изменяем, почему они тратят столько же памяти в моем коде?

Я запустил этот код, и у меня возникли вопросы, вроде как странно.

Использование String:

while(true)
{
    String s = String.valueOf(System.currentTimeMillis());
    System.out.println(s);
    Thread.sleep(10);
}

Использование StringBuilder:

StringBuilder s = null;
    while(true)
    {
        s = new StringBuilder();
        s.append(System.currentTimeInMillis());
        System.out.println(s);
        Thread.sleep(10);
    }

В обоих случаях они застревают в 12540 K трата памяти. Выполнение этого теста в Windows XP с пакетом обновления 2.

Почему они тратят столько же памяти? Почему неизменяемая строка перестала тратить память? Не по теме: Как преобразовать StringBuilder в массив байтов, закодированный в определенной кодировке? Ошибка

5
задан Buhake Sindi 28 February 2015 в 07:26
поделиться