Java编译器线程占用更多的CPU使用率。

4
我们有一个带有Java IO操作的服务器应用程序。运行应用程序时,我们观察到CompilerThread0和CompilerThread1的CPU使用率分别为45%和41%。此时应用程序正在为客户端提供IO服务,例如连接、接收和发送。就我所了解的相关内容而言,编译器线程是用于JIT和提高性能的。
我的问题首先是,为什么编译器线程需要消耗这么多的CPU资源,以及如何将其最小化,以便我们可以将CPU资源分配给其他线程。
提前感谢!
1个回答

6
我的问题首先是,编译器线程为什么要占用这么多CPU?
在正常情况下,JIT编译器应该在你的应用运行一段时间后启动,逐步编译频繁调用的类/方法。一旦所有需要编译的代码都被编译完毕,编译活动就会逐渐减少。
如果编译活动没有减少,那么可能出现了一些奇怪的情况。可能是以下原因之一:
- 你的应用程序大量使用动态代理,并且不断地生成新的代理类。 - 你的应用程序动态加载(和卸载)大量类。 - 你遇到了某种JVM错误。(但我找不到与这些症状相匹配的Bug数据库条目,所以我认为这是“不太可能”的。)
而如何最小化这个问题以便我们可以将CPU分配给其他线程呢?
虽然可能有一些JVM选项可以帮助解决问题,但我认为更好的方法是找出导致这个问题的原因。

我会检查以上建议,并希望能找到原因。 - Viswanath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接