我收到了这个错误:
"java.lang.OutOfMemoryError: Compressed class space"
直到我弄清楚触发器是什么,我试图禁用压缩类指针
-XX:-UseCompressedClassPointers.
但我仍然收到此错误。这怎么可能?
谢谢!
我收到了这个错误:
"java.lang.OutOfMemoryError: Compressed class space"
直到我弄清楚触发器是什么,我试图禁用压缩类指针
-XX:-UseCompressedClassPointers.
但我仍然收到此错误。这怎么可能?
谢谢!
了解 OutOfMemoryError 异常中解释了此异常:
原因:在 64 位平台上,指向类元数据的指针可以用 32 位偏移量(带有
UseCompressedOops
)表示。这由命令行标志控制UseCompressedClassPointers
(默认开启)。如果UseCompressedClassPointers
使用 ,则可用于类元数据的空间量固定为 amountCompressedClassSpaceSize
。UseCompressedClassPointers
如果超过所需的空间CompressedClassSpaceSize
,则会抛出java.lang.OutOfMemoryError
带有详细压缩的类空间。措施:增加
CompressedClassSpaceSize
或关闭即可UseCompressedClassPointers
。注意: 的可接受大小是有界限的CompressedClassSpaceSize
。例如-XX:CompressedClassSpaceSize=4g
,超出可接受的范围会导致诸如CompressedClassSpaceSize of 4294967296 is invalid 这样的消息;必须介于 1048576 和 3221225472 之间。
压缩类空间是元空间的一部分。
看起来您的解决方案是增加最大元空间大小,或者您可能有一个泄漏的类加载器。
通常,当 Java 堆中没有足够的空间来分配对象时会引发此错误。在这种情况下,垃圾收集器无法腾出空间来容纳新对象,并且无法进一步扩展堆。此外,当本机内存不足以支持 Java 类的加载时,可能会引发此错误。在极少数情况下,当花费过多时间进行垃圾收集并且释放的内存很少时,可能会抛出 java.lang.OutOfMemoryError。