如何在Java中分析对象创建?
我使用的系统创建了大量的对象,并一直对它们进行垃圾收集,这导致堆消耗的曲线非常陡峭。我想知道生成了哪些对象来优化代码,但我想不出在垃圾收集开始时转储堆的方法。当我尝试在随机时间通过JConsole手动启动dumpHeap时,我总是在GC完成运行后得到结果,并且没有得到任何有用的数据 欢迎提供任何有关如何追踪过多临时对象创建的说明。 从项目页面中引用: ApacheJMeter可用于测试 静态和动态性能 资源(文件、servlet、Perl) 脚本、Java对象、数据库和 查询、FTP服务器等)。它可以 用于模拟车辆上的重载 用于测试其性能的服务器、网络或对象 综合分析 不同负载下的性能 类型如何在Java中分析对象创建?,java,performance,garbage-collection,Java,Performance,Garbage Collection,我使用的系统创建了大量的对象,并一直对它们进行垃圾收集,这导致堆消耗的曲线非常陡峭。我想知道生成了哪些对象来优化代码,但我想不出在垃圾收集开始时转储堆的方法。当我尝试在随机时间通过JConsole手动启动dumpHeap时,我总是在GC完成运行后得到结果,并且没有得到任何有用的数据 欢迎提供任何有关如何追踪过多临时对象创建的说明。 从项目页面中引用: ApacheJMeter可用于测试 静态和动态性能 资源(文件、servlet、Perl) 脚本、Java对象、数据库和 查询、FTP服务器等)。
我记得M.Fowler提到,在您使用探查器测试整个系统之前,几乎不可能猜测导致性能问题的原因。您正在寻找的是程序中最密集的分配站点。您可以使用以下工具:。对你的评论的答复是: 当我试图通过 JConsole在随机时间手动执行,I 总是在GC完成后得到结果 它的运行,并没有得到任何有用的 数据 堆转储会触发VM中的GC,因为堆转储是堆中活动内容的报告(大部分情况下)-VM希望最准确地了解触发堆转储时活动内容,因此GC事件总是在转储请求启动后立即发生
优化Java堆是一门艺术,web上有很多关于如何优化的资料。看看BTrace可以做什么(),或者尝试使用JDK 6u18中的
jvisualvm
,它可以进行实时内存采样。您可以使用(和Dr.MEM等工具)如果上述解决方案不能解决您的问题,请创建您自己的自定义解决方案。不过,这可能是一种过分的做法,具体取决于您的问题。感谢您解释转储堆问题。现在很清楚为什么我没有看到任何有趣的数据。新的jvisualvm
真是一个享受。虽然它不能在远程机器上进行实时内存采样,但它可以进行CPU采样,这与本地进程上的内存采样相结合,已经证明是足够好的了。谢谢