【问题标题】:Disable Java JIT for a specific method/class?禁用特定方法/类的 Java JIT?
【发布时间】:2011-04-29 14:15:42
【问题描述】:

我在我的 Java 应用程序中遇到了 JIT 破坏代码的问题。如果我禁用 JIT,一切正常,但运行速度会慢 10-20 倍。

有什么方法可以禁用特定方法或类的 JIT?

编辑: 我使用的是 Ubuntu 10.10,两者的结果相同:

OpenJDK Runtime Environment (IcedTea6 1.9) (6b20-1.9-0ubuntu1)
OpenJDK 64-Bit Server VM (build 17.0-b16, mixed mode)

和:

Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) 64-Bit Server VM (build 14.2-b01, mixed mode)

【问题讨论】:

  • 您是否已经提交了错误?或者您是否发现了描述您的问题的现有错误?
  • 听起来不太可能是由于 JIT,不是吗?难道不是因为竞态条件(因为当你禁用 jit 时时间会改变)......
  • 我只使用一个线程。我正忙着研究这个错误,但现在真的没有时间。在 JIT 编译特定方法后,该错误始终出现。现在我只是将 -XX:CompileThreshold 选项设置得足够高。
  • 你试过更新版本的JDK吗?
  • 责备 JVM 通常应该排在后面 :)

标签: java jvm jit jvm-hotspot


【解决方案1】:

以下选项适用于我的 JVM,以排除特定方法:

-X:CompileCommand=exclude,the/package/and/Class,methodName

【讨论】:

  • Sun/Oracle Java 6 及更高版本使用-XX:CompileCommand 选项。请参阅java options for more information,专门针对 v8。
  • 抱歉挖了这么老的帖子;如果我将其与命名的内部类一起使用,我会将其分隔为com/domain/package/Outer/Innercom/domain/package/Outer$Inner
  • 我今天遇到了同样的问题。经过一些实验,似乎我们应该使用com/domain/package/Outer$Inner
【解决方案2】:

是的,有一个。 您可以提供要在启动时排除 JIT 编译的受影响类:

-Xjit:exclude={package/class.method|package/class.method}

【讨论】:

  • 我得到“无法识别的选项:-Xjit:exclude={...} 无法创建 Java 虚拟机。”
  • -X 选项是非标准的。它们可能会在版本之间发生变化,并且取决于您的 JVM
猜你喜欢
  • 2015-01-24
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 2012-10-12
相关资源
最近更新 更多