4

我收到了这个错误:

 "java.lang.OutOfMemoryError: Compressed class space"

直到我弄清楚触发器是什么,我试图禁用压缩类指针

-XX:-UseCompressedClassPointers.

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

谢谢!

4

2 回答 2

5

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

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

措施:增加CompressedClassSpaceSize或关闭即可UseCompressedClassPointers。注意: 的可接受大小是有界限的CompressedClassSpaceSize。例如-XX:CompressedClassSpaceSize=4g,超出可接受的范围会导致诸如CompressedClassSpaceSize of 4294967296 is invalid 这样的消息;必须介于 1048576 和 3221225472 之间

于 2017-01-09T17:39:48.407 回答
4

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

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

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

于 2016-02-02T20:06:39.027 回答