2013-07-31 5 views
-3

ThreadLocal создан, чтобы иметь отдельную копию объектов для работы в потоковом режиме.ThreadLocal и использование памяти

Это означает, что количество объектов в процессе будет увеличиваться как количество потоков. Это потому, что каждый поток создаст свою собственную копию ThreadLocals.

  • Разве это не увеличивает потребность в памяти процесса?
+1

Несет. Когда потоки завершаются, объекты исчезают. – tbodt

+1

... Конечно, больше объектов означает больше памяти; это самоочевидно. –

+2

Этот вопрос не соответствует теме, потому что он просто запрашивает подтверждение. –

ответ

2

Вы, кажется, подразумевает, что это ThreadLocal s, которые являются конкретным виновником, который увеличивает использование памяти, но на самом деле ваш вопрос конкретно не связан с ThreadLocal с по себе. В описываемой вами ситуации это всего лишь некоторый объект, который был выделен в какой-то момент и будет недоступен, когда поток будет умирать не позднее.

1

The amount of memory процесс занимает в Java зависит от:

  • объектов
  • Классы
  • Тем
  • Native структуры данных
  • Машинный код

потребление памяти, связанные с каждым пунктом меняется приложений, среды исполнения и платформ. Итак, как вы вычисляете общую память? Ну, на самом деле не так просто получить точный номер, потому что у вас мало контроля над родной частью. Единственными частями, которые вы можете реально контролировать, является количество кучи -Xmx, память, потребляемая классами -XX: MaxPermSize и стек стека -Xss, который контролирует объем памяти, потребляемой каждым потоком. Будьте осторожны при настройке размера стека, поскольку слишком низкий размер вызовет исключения StackOverflow, и ваше приложение будет работать неправильно. Таким образом, формула такова:

(-Xmx) + (-XX:MaxPermSize) + numberofthreads * (-Xss) + Other mem 

Таким образом, количество памяти, которую занимает процесс, будет увеличиваться по мере увеличения количества потоков. Ваш вопрос, похоже, не о ThreadLocals, скорее о потоке в целом.

Смежные вопросы