工会网站建设可以,建设彩票网站合法吗,亚马逊跨境电商培训,网站建设公司推荐金石下拉g发生以下情况之一时#xff0c;可能会引发OutOfMemoryError #xff1a; JVM耗尽了本机内存 Java堆内存不足 PermGen或Metaspace内存不足 JVM花太多时间试图收集垃圾 通常可以从错误消息中OutOfMemoryError出OutOfMemoryError的根本原因。 让我们研究每种情况的细节。 … 发生以下情况之一时可能会引发OutOfMemoryError JVM耗尽了本机内存 Java堆内存不足 PermGen或Metaspace内存不足 JVM花太多时间试图收集垃圾 通常可以从错误消息中OutOfMemoryError出OutOfMemoryError的根本原因。 让我们研究每种情况的细节。 JVM耗尽了本机内存 这基本上意味着分配给JVM的内存量已用完。 32位JVM的最大进程大小约为3.5 – 4 GB。 如果超过它将OutOfMemoryError 。 即使在64位JVM中当JVM请求更多内存时操作系统也可能根本没有足够的内存。 请看以下片段 for (int i 0; true; i) { new Thread() { public void run() { try { Thread.sleep(1000000); } catch(InterruptedException e) { } } }.start(); System.out.println(Thread; i created);
} 在我的笔记本上带有Java 1.8.0_112的64位Mac OS X 10.11.6在创建2023个线程之后JVM崩溃了 Thread 2021 created
Thread 2022 created
Thread 2023 created
Exception in thread main java.lang.OutOfMemoryError: unable to create new native threadJava堆内存不足 这个很明显。 分配了太多对象因此它们不适合为JVM配置的堆空间。 增大堆大小听起来像是一种解决方案但是如果它是由内存泄漏引起的则只会推迟OutOfMemoryError 。 错误消息非常清楚 Exception in thread “main” java.lang.OutOfMemoryError: Java heap spacePermGen或Metaspace内存不足 PermGenJava 7和更早版本的最大大小有限 。 这意味着如果加载了太多的类PermGen可能会填满并且将引发OutOfMemoryError 。 增加最大PermGen大小应该会有所帮助。 Java 8没有PermGen但是有Metaspace。 默认情况下它具有无限制的最大大小因此只要您不通过MaxMetaspaceSize标志设置限制就不应引发该错误。 要诊断由PermGen或Metaspace引起的OutOfMemoryError 应检查错误消息 Exception in thread “main” java.lang.OutOfMemoryError: PermGen space
Exception in thread “main” java.lang.OutOfMemoryError: MetaspaceJVM花太多时间试图收集垃圾 这是最棘手的问题–当GC花太多时间收集垃圾而导致的结果太少并且进一步执行应用程序毫无意义时将引发OutOfMemoryError 。 换句话说必须满足以下 所有 条件 GC中花费了超过98的时间98是默认值可以被GCTimeLimitN覆盖 在完整GC期间只有不到2的堆被回收再次2是默认值可以被GCHeapFreeLimitN覆盖。 前面提到的两个条件都适用于五个连续的完整GC周期 UseGCOverheadLimit标志未禁用true为默认值 运行完整的GC意味着JVM总是耗尽内存。 如果花费了98的时间来释放2的堆则意味着CPU几乎完全忙于GC几乎无法完成任何应用程序逻辑。 这就是为什么放弃并抛出OutOfMemoryError并显示以下消息的原因 Exception in thread “main” java.lang.OutOfMemoryError: GC overhead limit exceeded翻译自: https://www.javacodegeeks.com/2017/08/what-causes-outofmemoryerror.html