代码之家  ›  专栏  ›  技术社区  ›  L. Cornelius Dol

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

  •  12
  • L. Cornelius Dol  · 技术社区  · 17 年前

    其目的是帮助确定给定Java应用程序的最佳堆栈大小。

    可以用这个信息做一件事,创建一个堆栈大小的范围表,这些线程可以在退出时修改,并且可以周期性地在应用程序退出时被丢弃。

    编辑:这是在实际工作负载的客户机上运行的上下文,我无法让profiler访问这些机器。

    EDIT2:作为对一个答案的回应,每个线程256Kb,我已经想了一段时间了,这和实际需要有多接近(我还想知道这个问题是否不太相关,因为 也许 堆栈空间按需分配)。我们有一个基于消息传递和高度线程化的应用服务器,它可以运行在从ARM手持设备到octo core Linux、到中端和大型机的所有设备上—如果我们能感觉到在哪里(如果)我们可以用堆栈空间交换具有多个消息处理程序的系统上的堆,那就太好了。

    有一些类似的问题值得关注,但它们是本机/操作系统特有的:

    4 回复  |  直到 9 年前
        1
  •  1
  •   Yuval Adam    17 年前

    堆栈内存将很难获得。

    您所能做的,而且非常容易的,是通过 MemoryMXBean .

        2
  •  0
  •   Cuga    17 年前
        3
  •  0
  •   Davide    17 年前

    我想你可以用全新的 VisualVM 我也是。

        4
  •  -1
  •   Eldius    14 年前

    您可以使用Runtime类来监视JVM memmory,如下所示。

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

    或者你可以使用JConsole,JVisualVM e JInfo。 你可能会得到更多关于这些工具的信息 Here:

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