运行一段时间后,可以获得Java中线程使用的实际堆栈大小吗?

这个想法是帮助确定给定Java应用程序的最佳堆栈大小。

使用此信息可以完成的一件事是创建一个堆栈大小的范围表,线程可以在它们退出时修改,并且可以在应用程序退出时定期转储。

编辑:这是在具有真实工作负载的客户机器上运行的环境,我无法获取探查器访问权限。

编辑2:回答一个答案,在每个线程的(IIRC)256Kb,我想知道现在有多接近现实需要的东西(我也想知道这个问题可能不是很相关,因为堆栈空间可能是按要求分配)。 我们有一个基于消息传递和高度线程化的应用服务器,可运行从ARM手持设备到octo-core Linux,到中型和大型机的所有东西 – 我们可以感受到我们可以交易的位置(以及是否)堆栈空间堆栈在具有许多消息处理程序的系统上。

有一些类似的问题值得关注,但它们是本机的/特定于os的:

  • 如何确定最大堆栈使用量?
  • 如何确定最佳线程堆栈大小?

堆栈内存很难获得。

您可以通过MemoryMXBean轻松实现JVM内存使用。

使用JConsole–您可能已经拥有它: http : //java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html http://openjdk.java.net/tools/svc/jconsole /

我认为你也可以用全新的VisualVM做到这一点。

您可以使用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/