Можно ли получить реальный размер стека, используемый потоком в Java после некоторого времени работы? - PullRequest
12 голосов
/ 05 мая 2009

Идея состоит в том, чтобы помочь определить оптимальный размер стека для данного Java-приложения.

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

РЕДАКТИРОВАТЬ: Это в контексте работы на клиентских компьютерах с реальными рабочими нагрузками, к которым я не могу получить доступ к профилировщику.

РЕДАКТИРОВАТЬ2: В ответ на один ответ, (IIRC) 256Kb на поток, я некоторое время задавался вопросом, насколько это близко к реальности того, что нужно (я также задаюсь вопросом, может ли этот вопрос быть не очень актуальным, потому что возможно пространство стека выделяется по запросу). У нас есть сервер приложений, основанный на передаче сообщений, с высокой степенью многопоточности и работающий на всем, от ARM-контроллера до Linux с окто-ядром, среднего и мэйнфреймов - было бы хорошо иметь представление о том, где (и если) мы можем торговать место в стеке для кучи в системах с множеством обработчиков сообщений.

Есть несколько похожих вопросов, которые представляют интерес, но они являются родными / специфичными для ОС:

Ответы [ 4 ]

1 голос
/ 06 мая 2009

Память стека будет трудно получить.

Лучшее, что вы можете сделать, и довольно легко, это использование памяти JVM через MemoryMXBean.

0 голосов
/ 24 февраля 2012

Вы можете использовать класс Runtime для мониторинга памяти JVM следующим образом.

Runtime rt = Runtime.getRuntime();
System.out.println((rt.freeMemory() / 1024) + "/" + (rt.maxMemory() / 1024) + " kB");

Или вы можете использовать JConsole, JVisualVM и JInfo. Вы можете получить больше информации об этих инструментах Здесь:

http://java.sun.com/developer/technicalArticles/J2SE/monitoring/

0 голосов
/ 14 мая 2009

Я думаю, что вы можете сделать это с новым VisualVM .

0 голосов
/ 05 мая 2009

Используйте JConsole - скорее всего, он у вас уже есть: http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html http://openjdk.java.net/tools/svc/jconsole/

...