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