Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中分析对象创建?_Java_Performance_Garbage Collection - Fatal编程技术网

如何在Java中分析对象创建?

如何在Java中分析对象创建?,java,performance,garbage-collection,Java,Performance,Garbage Collection,我使用的系统创建了大量的对象,并一直对它们进行垃圾收集,这导致堆消耗的曲线非常陡峭。我想知道生成了哪些对象来优化代码,但我想不出在垃圾收集开始时转储堆的方法。当我尝试在随机时间通过JConsole手动启动dumpHeap时,我总是在GC完成运行后得到结果,并且没有得到任何有用的数据 欢迎提供任何有关如何追踪过多临时对象创建的说明。 从项目页面中引用: ApacheJMeter可用于测试 静态和动态性能 资源(文件、servlet、Perl) 脚本、Java对象、数据库和 查询、FTP服务器等)。

我使用的系统创建了大量的对象,并一直对它们进行垃圾收集,这导致堆消耗的曲线非常陡峭。我想知道生成了哪些对象来优化代码,但我想不出在垃圾收集开始时转储堆的方法。当我尝试在随机时间通过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采样,这与本地进程上的内存采样相结合,已经证明是足够好的了。谢谢