我很难理解为什么有些事情会以意想不到的方式影响JVM上的性能。更具体地说,我有一个微型基准,可以检查我的参与者框架以乒乓球的方式发送消息的速度。
框架有一个参与者注册中心,并且这个注册表是分区的。与启动时相比,基准测试并没有真正接触到这些代码。所以这里没有热的路--不管是什么。还是这样。根据注册表有多少分区,应用程序运行得更慢或更快。
分区数量越多,应用程序运行的速度就越快,达到一定的水平。
为了非常清楚,这段代码在基准测试的实际分析位中没有被触及。就在那里,占据着记忆。
我能想到的唯一合理的原因是GC在某种程度上受到了大对象的影响,但是随着它运行得越快,注册表的分区越多,这就感觉有违直觉。
无论是否使用JVM GC参数,都会发生这种情况。
有什么想法吗?有什么明显的事情我应该知道吗?例如,大型对象对GC或类似的东西有一些全面的影响?
Java版本1.8.0_131
发布于 2017-07-24 20:49:36
您可以从以下几个方面开始:
但是,如果您想要更具体的解决方案,请提供一些源代码,并准确地指出问题所在和度量是什么。你在观察什么模式。
此外,您还可以在JDK中使用VisualVM和任务控制--标准工具。
顺便说一句,当你问到演员时,我认为这可能是插曲(在下面有一个关于Akka的例子):
为低暂停垃圾收集器CMS和G1调整JVM (卷轴向下找到阿克卡)
发布于 2017-07-27 06:04:58
您可以进行飞行记录,并在Java任务控制中查看它。它将为您提供有关GC活动、锁争用、分配速率、I/O、内存使用、VM内部发生的长时间运行的safepoint操作等方面的信息。
https://stackoverflow.com/questions/45289191
复制相似问题