gpt4 book ai didi

java - 在 JVM 上启用逃逸分析的经验

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:05:32 24 4
gpt4 key购买 nike

我刚刚尝试在 jdk6-u18 VM(在 solaris 上)上启用 -XX:+DoEscapeAnalysis 选项,但体验相当令人失望。我正在运行一个 scala 应用程序,它有很多参与者(其中 20,000 个)。这是制造垃圾的方法!

通常,该应用程序可以使用 256Mb 的堆运行,但会生成大量 的垃圾。在其稳态中:

  • 将 10% 的时间花在 GC 上
  • 在 <30 秒内生成 >150Mb 的垃圾,然后进行 GC

我认为逃逸分析可能会有帮助,所以我启用了该选项并重新运行应用程序。我发现该应用程序越来越无法清除它收集的垃圾,直到它似乎最终将全部时间都花在了 GC 上,并且该应用程序在其完全分配时“趋于平缓”。

在这一点上,我应该说应用程序没有抛出我预期的 OutOfMemoryError。也许 JConsole(我用来执行分析的)在启用此选项的情况下无法正确显示 GC 统计信息(我不相信)?

然后我删除了该选项并重新启动,应用程序又变得“正常”了!有人知道会发生什么吗?

最佳答案

1 逃逸分析是否显示为在 JConsole 中启用?您需要确保使用 -server 选项运行 VM。我假设你有这个工作,但我只是想检查一下。

2 我认为逃逸分析不会对 Scala Actors 的情况有所帮助。如果您执行以下操作,您可能会看到很大的收获:

def act():Unit = {
val omgHugeObject = new OMGHugeObject();
omgHugeObject.doSomethingCrazy();
}

在上面的示例中,EscapeAnalysis 将使 omgHugeObject 可以分配在堆栈而不是堆上,因此不会产生垃圾。我认为逃逸分析不太可能对 Actor 有所帮助。它们的引用将始终“转义”到 actor 子系统。

3您使用的是最新版本的 Scala 吗?我相信在最近的版本中修复了内存泄漏。这甚至导致了Lift产生您可能会研究的自己的 Actor 库。

4 您可以尝试 G1Garbage 收集器 您可以通过以下方式启用它:

-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC

关于java - 在 JVM 上启用逃逸分析的经验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2179830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com