2011-01-06 2 views
17

Есть ли способ узнать, сколько памяти занимает явная нить в VM?Сколько памяти занимает моя нить java?

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

Thanks

+0

Вам следует попробовать инструмент [VisualVM] (https://visualvm.dev.java.net/). –

+7

Солнце должно прослушиваться - вы можете использовать новые интерфейсы на платформе «ThreadMXBean» для использования в потоковой памяти: http://download.oracle.com/javase/6/docs/jre/api/management/ extension/com/sun/management/ThreadMXBean.html # getThreadAllocatedBytes% 28long% 29 – BeeOnRope

+0

@BeeOnRope это замечательный ответ! Вы должны опубликовать его как ответ, и я его проголосую. –

ответ

22

Потоки Java используют кучу в качестве общей памяти. Отдельные потоки имеют свой стек (размер которого можно установить с помощью опции командной строки -Xss, по умолчанию - 512 КБ), но вся другая память (куча) не относится к конкретным потокам и спрашивает, сколько из нее использует один конкретный поток просто не имеет смысла.

+0

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

+0

@Vikas: это все еще не имеет смысла. Что вы хотите использовать для этого числа * для *? –

+0

Мне нужно сделать систему для динамического увеличения или уменьшения количества потоков на основе некоторых внешних факторов. Я хотел проанализировать два варианта, которые у меня есть. 1. Продолжайте и удаляйте потоки в системе столько времени ИЛИ 2. Начните с количества потоков MAX и уменьшите, я просто скажу им, чтобы они подождали в Thread.sleep. .. этот 2-й подход более прост с точки зрения реализации, но он хотел проанализировать, сколько пространства стека принимает ожидающий поток в системе, так что я исчерпываю возможности Out of memory. –

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