对象创建是否会影响应用程序性

时间:2018-05-03 18:51:57

标签: java multithreading jvm

我正在尝试解决应用程序的性能问题。 GC报告说(在下面的链接中可用)对象创建率太高但是我看到在20分钟的运行中,GC过程并不是很糟糕,所以如果GC没有长时间运行,对象创建如何重要。在做了一些微基准测试之后,我注意到代码的几个部分(没有数据库调用仅内存计算)需要大约2分钟才能处理100个用户负载,但在单个用户负载运行2秒内。我怀疑可能存在线程争用问题,因为有20个后台线程正在运行(不包括tomcat线程池)。对象创建率可能是根本原因吗? (如下面的链接所示)

http://gceasy.io/my-gc-report.jsp?p=c2hhcmVkLzIwMTgvMDUvMy8tLWdjbG9nLmxvZy0tMTgtNTUtMjg=

1 个答案:

答案 0 :(得分:0)

您的GC日志肯定会显示一些内存问题。关键点是:

Minor GC count  352
Minor GC reclaimed  534.76 gb
Minor GC total time 1 min 40 sec 680 ms
Minor GC avg time   286 ms
Minor GC avg time std dev   272 ms
Minor GC min/max time   10 ms / 970 ms
Minor GC Interval avg   3 sec 334 ms 

根据这些指标,您的应用每3.5秒生成1.5 Gb的垃圾。

如果您没有执行特定内存密集型任务(如财务模拟),那么这是一个庞大的数字,必须进行调查。

我建议使用可以进行内存分析的调试工具。 JProfiler肯定会完成这项工作,但也许只是使用JVisualVM(已作为jdk的一部分安装在您的计算机上),您将能够找到分配大量内存的内容。