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

时间:2010-03-16 18:29:21

标签: java performance garbage-collection

我使用的系统正在创建大量的对象并且垃圾一直在收集它们,这导致堆消耗的图表非常陡峭。我想知道正在生成哪些对象来调优代码,但我无法找到在垃圾收集开始时转储堆的方法。当我试图在随机时间通过JConsole手动启动dumpHeap时,我总是在GC完成运行后得到结果,并且没有得到任何有用的数据。

欢迎任何有关如何追踪过多临时对象的说明。

4 个答案:

答案 0 :(得分:1)

您正在寻找的是您计划中最密集型分配网站。您可以使用以下工具:Allocation Instrumentor for Java。您的评论的答案:

  

当我尝试通过启动dumpHeap时   JConsole随机手动,我   GC完成后总会得到结果   它的运行,并没有得到任何有用的   数据

是堆转储触发VM中的GC,因为堆转储是堆中存在的内容的报告(大多数情况下) - VM需要最精确的图像显示当前的实时内容堆转储已被触发,因此GC事件将始终在转储请求启动后立即发生。

调整Java堆是一门艺术 - 网上有很多关于如何做的材料。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

Apache JMeter

从项目页面引用:

  

Apache JMeter可用于测试   静态和动态的表现   资源(文件,Servlets,Perl   脚本,Java对象,数据库和   查询,FTP服务器等)。它可以   用来模拟一个重负荷   服务器,网络或对象来测试它   力量或整体分析   不同负载下的性能   类型。

我记得M. Fowler提到,在使用分析器测试整个系统之前,几乎不可能猜出导致性能问题的原因。

答案 3 :(得分:0)

如果上述规定的解决方案无法解决您的目的,您可以使用JVMPI interface(以及像Dr.MEM这样的工具)并创建您自己的自定义解决方案。然而,根据您的问题,这可能是一种过度杀伤。