代码之家  ›  专栏  ›  技术社区  ›  elifiner

如何在Java中配置对象创建?

  •  4
  • elifiner  · 技术社区  · 14 年前

    我使用的系统正在创建大量的对象,并一直收集这些对象,这导致堆消耗的图形非常参差不齐。我想知道正在生成哪些对象来优化代码,但在垃圾收集开始时,我找不到一种方法来转储堆。当我随机尝试通过jconsole手动启动dumpheap时,我总是在gc完成运行后得到结果,并且没有得到任何有用的数据。

    关于如何跟踪过多的临时对象创建的任何说明都是受欢迎的。

    4 回复  |  直到 14 年前
        1
  •  1
  •   rhu    14 年前

    看看btrace能做什么( http://kenai.com/projects/btrace/pages/Home )或者尝试使用 jvisualvm 在JDK 6U18中,它执行实时内存采样。

        2
  •  1
  •   Amir Afghani    14 年前

    你要找的是最 加强的 程序中的分配站点。您可以使用如下工具: Allocation Instrumentor for Java . 你的评论的答案是:

    当我试图通过 jconsole随机手动,i 总是在GC完成后得到结果 它跑了,没什么用 数据。

    堆转储是否触发VM中的GC,因为堆转储是堆中活动内容的报告(大多数情况下)-VM希望获得触发堆转储时最准确的活动内容图片,因此在转储请求启动。

    调整Java堆是一门艺术,网络上有很多关于如何完成它的材料。

        3
  •  0
  •   Roman    14 年前

    Apache JMeter

    从项目页面引用:

    Apache JMeter可用于测试 静态和动态性能 资源(文件、servlets、perl 脚本、Java对象、数据库和 查询、FTP服务器等)。它可以 用于模拟 要测试的服务器、网络或对象 强度或整体分析 不同负载下的性能 类型。

    我记得M.Fowler提到过,在用分析器测试整个系统之前,几乎不可能猜测是什么导致了性能问题。

        4
  •  0
  •   Kannan Ekanath    14 年前

    你可以使用 JVMPI interface (以及像Dr.Mem这样的工具)并创建您自己的自定义解决方案,如果上述解决方案中没有一个解决了您的目的。然而,这可能是一个过度杀伤力取决于你的问题。