当前位置:  开发笔记 > 编程语言 > 正文

java.lang.OutOfMemoryError GC开销限制超过了Java堆空间?

如何解决《java.lang.OutOfMemoryErrorGC开销限制超过了Java堆空间?》经验,为你挑选了0个好方法。

java.lang.OutOfMemoryError:Java堆空间的含义 该消息表示应用程序仅需要比其正常运行所需的Java堆空间更多的空间。

java.lang.OutOfMemoryError:超出GC开销限制的意思是 此消息表示由于某种原因,垃圾收集器占用过多的时间(默认情况下为该进程所有CPU时间的98%),并且每次运行都恢复很少的内存(默认情况下为堆的2%)。在内部,这还意味着当应用程序仅需要比其正常运行可用的Java堆空间更多的空间时。

所以我的问题是以上两种情况中的哪一种会被触发?

所以这是我的理解,何时会根据情况抛出特定的异常:

假设我分配了1GB的堆大小。当前正在使用的堆内存为970 MB。一个线程启动了(JVM不预先知道它将消耗多少内存)。现在,GC可以采取以下步骤之一

1)JVM开始分配内存,然后在某一时间耗尽1GB的内存并抛出 java.lang.OutOfMemoryError: Java heap space

2)GC会提前运行,并尝试释放一些内存,因为它知道当前正在使用的内存已接近1 GB分配的堆。但是在随后的每次运行中,它不能释放超过2%的空间。然后它会抛出java.lang.OutOfMemoryError: GC overhead limit exceeded

在我的问题中我的理解正确吗?

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有