我正在运行的一个java进程在它运行的第一个小时左右就一直表现良好。但是,性能随后会迅速下降。当分析时,我发现元空间垃圾收集相当频繁地发生,直到小时标记,然后失控:

我非常确定我可以使用-XX:MaxMetaspaceSize选项来解决这个问题。然而,我想更多地了解为什么会发生这种行为。我不能想象为什么垃圾收集算法会这样。有没有人有关于更好的修复的解释或建议?谢谢
发布于 2015-07-26 08:16:37
您可以尝试设置-XX:MaxMetaspaceExpansion=0。在尝试增长元空间之前,这应该会强制执行完整的GC -释放动态创建的方法/类数据。此外,您可以尝试将MaxMetaspaceFreeRatio设置为比缺省值更低的值,以便在GC之后进一步缩小元空间本身。
有关其他元空间相关选项,请参阅this answer。
元空间收集本身依赖于垃圾收集器正在卸载的类。因此,根据您正在使用的GC,调整以更快地回收垃圾可能也会有所帮助。
https://stackoverflow.com/questions/31587732
复制相似问题