12

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

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

编辑:这是在具有我无法访问探查器访问的真实工作负载的客户机器上运行的上下文中。

EDIT2:作为对一个答案的回应,在(IIRC)每个线程 256Kb 时,我有一段时间想知道这与实际需要的东西有多接近(我也想知道这个问题是否可能不是很相关,因为堆栈空间可能是按需分配)。我们有一个基于消息传递和高度线程化的应用服务器,可在从 ARM 手持设备到八核 Linux 再到中型机和大型机的所有设备上运行 - 了解我们可以在哪里(以及是否)可以交易会很好具有许多消息处理程序的系统上的堆的堆栈空间。

有一些类似的问题很有趣,但它们是本机/操作系统特定的:

4

4 回答 4

2

堆栈内存将很难获得。

你能做的最好的,也很容易的,是通过MemoryMXBean.

于 2009-05-05T21:28:51.743 回答
0

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

于 2009-05-14T16:39:56.517 回答
0

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

于 2009-05-05T18:16:21.487 回答
-1

您可以像这样使用 Runtime 类来监控 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/

于 2012-02-23T20:30:31.657 回答