Java CompilerThread占用更多CPU

时间:2013-08-17 13:49:35

标签: java performance jit

我们有一个带有java IO操作的服务器应用程序。运行应用程序时,我们观察到CompilerThread0和CompilerThread1的CPU使用率占用了45%和41%的CPU。此应用程序此时正在为客户端提供IO,如连接,接收和发送。据我所研究,我发现compilesteread用于JIT并提高性能。

我的问题首先是,为什么它为compiletrareads占用了大量CPU,以及如何最小化它以便我们可以将CPU提供给其他线程。

提前致谢!

1 个答案:

答案 0 :(得分:4)

  

我的问题首先是为什么它为编译器线程占用了大量的CPU

在正常情况下,JIT编译器应该在应用程序运行一段时间后(逐步)编译经常调用的类/方法。一旦编译了所有需要编译的代码,编译活动就会消失。

如果编译活动没有消失,那么就会发生一些奇怪的事情。它可能是以下之一:

  • 您的应用程序正在大量使用动态代理,并且您不断生成新的代理类。
  • 您的应用程序正在动态加载(和卸载)许多类。
  • 您遇到过某种类型的JVM错误。 (但是我找不到符合这些症状的Bug数据库条目。所以我称之为“不太可能”。)
  

以及如何最小化这个,以便我们可以将CPU提供给其他线程。

可能有一些JVM选项可能有所帮助,但我认为你最好找出造成这种情况的原因。