尝试使用jstat监视JVM的性能时,我看到以下几行-
Timestamp PC PU OC **OU** YGC FGC FGCT GCT
...
283.7 132608.0 132304.8 1572864.0 **398734.1** 20 0 0.000 3.061
284.0 132608.0 132312.8 1572864.0 **1547795.2** 21 0 0.000 3.061
284.2 132608.0 132313.7 1572864.0 **417220.7** 21 0 0.000 3.418
...
有关的JVM使用2.5GB的Eden和4GB的Max运行。堆(-Xmn2560m -Xms4096m -Xmx4096m)
我不知道这些旧使用率的峰值怎么可能?
最佳答案
完全可以猜测,但是看起来好像是发生了,因为年轻的一代做了一个GC,可以将新对象踢入老一代。那可能会导致更老的一代压实过关。
我猜它会复制所有新内容(使旧的基因组变大),然后将其压缩回去……再次完全是猜测。
由于您要从年轻一代移走一堆东西,因此即使没有完整的GC也可能需要一些时间(和空间)来移动一些东西。