OutOfMemoryError:压缩的类空间

use*_*150 4 java memory-leaks out-of-memory java-8 metaspace

我收到此错误:

 "java.lang.OutOfMemoryError: Compressed class space"
Run Code Online (Sandbox Code Playgroud)

在我弄清楚触发因素之前,我尝试禁用压缩的类指针

-XX:-UseCompressedClassPointers.

但我仍然收到此错误。这怎么可能?

谢谢!

alb*_*ban 5

理解 OutOfMemoryError 异常中解释了此异常

原因:在 64 位平台上,指向类元数据的指针可以用 32 位偏移量(带有UseCompressedOops)表示。这由命令行标志控制UseCompressedClassPointers(默认情况下打开)。如果UseCompressedClassPointers使用 ,则可用于类元数据的空间量固定为数量CompressedClassSpaceSize。如果需要的空间UseCompressedClassPointers超过CompressedClassSpaceSize,则会抛出一个java.lang.OutOfMemoryError带有详细信息的压缩类空间

行动:增加CompressedClassSpaceSize或您可以关闭UseCompressedClassPointers。注意: 的可接受大小是有界限的CompressedClassSpaceSize。例如-XX:CompressedClassSpaceSize=4g,超出可接受的界限会导致CompressedClassSpaceSize of 4294967296等消息无效;必须介于 1048576 和 3221225472 之间


小智 4

压缩类空间是元空间的一部分。

看起来您的解决方案是增加最大元空间大小,或者您可能有一个泄漏的类加载器。

通常,当 Java 堆中没有足够的空间来分配对象时,会抛出此错误。在这种情况下,垃圾收集器无法腾出空间来容纳新对象,并且堆也无法进一步扩展。此外,当本机内存不足以支持 Java 类的加载时,也可能会引发此错误。在极少数情况下,当花费过多的时间进行垃圾收集并且释放的内存很少时,可能会抛出 java.lang.OutOfMemoryError 。

  • 一些细节会有所帮助,例如显示增加最大元空间大小的选项。 (2认同)