我注意到我的应用程序中有一个奇怪的现象。在将对象提交到服务器后,我将它们存储在 Hashmap 中,并在响应到达时将其删除。
我最近注意到运行后性能非常慢。经过检查,我发现内存使用量保持在 4GB,然后下降到不到 1GB。我怀疑它正在清理很多对象,这就是性能变得如此糟糕的原因。
所以问题是为什么 Java 这么晚才开始垃圾收集?也就是说,为什么要等到 Heap 满了再做 Garbage 收集呢?它不应该定期收集垃圾吗?
存储在 HashMap 中的对象是在那个时候创建的,也就是说它们的寿命不长。
这是在 Linux (RHEL)、Oracle JVM HotSpot 7. 64 位上。4个核心。这是应用程序的运行方式:
java -jar -Xmx4g prog.jar
注意:我已经看到了这个:为低延迟调整垃圾收集但是现在我想了解为什么 GC 需要这么长时间才能启动?