Ответ 1
Память стека будет трудно получить.
Лучшее, что вы можете сделать, и довольно легко, - использование памяти JVM через MemoryMXBean
.
Идея заключается в том, чтобы помочь определить оптимальный размер стека для данного Java-приложения.
Одна вещь, которая может быть сделана с помощью этой информации, создает таблицу диапазонов размеров стека, которые потоки могут изменять по мере их выхода и которые могут периодически сбрасываться и при выходе приложения.
EDIT: это в контексте работы на клиентских машинах с реальной рабочей нагрузкой, с которой я не могу получить доступ к профилировщику.
EDIT2: В ответ на один ответ, на (IIRC) 256 Кбит/с на поток, я некоторое время задавался вопросом, насколько близка реальность того, что нужно (я также задаюсь вопросом, может ли этот вопрос быть не очень релевантным, потому что, возможно, пространство стека выделяется по требованию). У нас есть сервер приложений, который основан на передаче сообщений и очень многопоточен и работает на всем: от ARM-портативного до окто-core Linux, до среднего и мэйнфреймов - было бы хорошо иметь представление о том, где (и если) мы можем торговать стека для кучи систем с большим количеством обработчиков сообщений.
Есть несколько похожих вопросов, которые представляют интерес, но они являются родными /os -specific:
Память стека будет трудно получить.
Лучшее, что вы можете сделать, и довольно легко, - использование памяти JVM через MemoryMXBean
.
Использовать JConsole - скорее всего, у вас уже есть: http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html http://openjdk.java.net/tools/svc/jconsole/
Я думаю, вы можете сделать это с помощью нового VisualVM.
Вы можете использовать класс Runtime для мониторинга memmory JVM, как это.
Runtime rt = Runtime.getRuntime();
System.out.println((rt.freeMemory() / 1024) + "/" + (rt.maxMemory() / 1024) + " kB");
Или вы можете использовать JConsole, JVisualVM e JInfo. Вы можете получить дополнительную информацию об этих инструментах Здесь:
http://java.sun.com/developer/technicalArticles/J2SE/monitoring/