我主要使用 Java 编写宠物项目,这些项目大部分时间都是空闲的。在空闲数小时/天后,响应时间增加到秒(最多 10 秒),然后慢慢减少回 200-300 毫秒。
据我了解,发生这种情况是因为 JIT去优化(优化的代码被标记为僵尸,被删除然后再次编译)。
除非代码缓存已满,否则有什么方法可以禁止 JVM 去优化代码?Java 9 的 AOT 看起来是这种情况下的最佳解决方案,但我仍然没有设法使其工作。
UPD:和往常一样,正确的解决方案是显而易见的。看起来问题实际上是由交换引起的。尽管有 12 GB 的内存,其中 6 个是空闲的,但一段时间后,每个 JVM 的内存中大约有 100 MB 被交换到了 HDD。
尽管如此,@apangin 的回答对于遇到同样情况的其他人来说可能很有用,所以我把这个问题留在这里。谢谢大家!