代码之家  ›  专栏  ›  技术社区  ›  stan

JVM编译时与代码缓存

  •  4
  • stan  · 技术社区  · 6 年前

    我一直在测试我的应用程序,并用JMC分析它。我注意到在负载下,它执行了相当多的JIT编译。如果我每秒发送大量事务,则编译时间会急剧增加。编译时间总是与应用程序的任何重载测试成比例增长。

    我还观察到代码缓存也在缓慢上升。所以我决定将代码缓存保留空间提高到500MB进行测试。坏动作!现在,它将花费更多的时间来执行JIT。

    然后,我通过 -xx:-usecodecacheflashing显式禁用了代码缓存刷新。但是,我注意到峰值代码缓存使用率大于当前的大小。这就引出了几个问题:

    1. JVM是否尝试缓存每个JIT编译?
    2. 即使禁用了刷新,为什么峰值代码缓存大小大于当前大小?
    3. 是否存在在函数结束后自动删除的“临时”编译代码?
    4. 我还观察到代码缓存也在缓慢上升。所以我决定将代码缓存保留空间提高到500MB进行测试。坏动作!现在它花更多的时间来执行JIT。

      然后我显式地禁用了代码缓存刷新通过 -XX:-UseCodeCacheFlushing 。但是,我注意到峰值代码缓存使用率大于当前的大小。这就引出了几个问题:

      enter image description here

      1. JVM是否尝试缓存每个JIT编译?
      2. 即使禁用了刷新,为什么峰值代码缓存大小大于当前大小?
      3. 是否存在在函数结束后自动删除的“临时”编译代码?
    1 回复  |  直到 6 年前
        1
  •  2
  •   apangin    6 年前

    UseCodeCacheFlushing -XX:-UseCodeCacheFlushing

    -XX:-MethodFlushing