OutOfMemoryError:压缩类空间

时间:2016-02-02 19:47:41

标签: java memory-leaks java-8 out-of-memory metaspace

我收到了这个错误:

 "java.lang.OutOfMemoryError: Compressed class space"

直到我弄清楚是什么触发器,我试着 使用

禁用压缩类指针

-XX:-UseCompressedClassPointers.

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

谢谢!

2 个答案:

答案 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。