zoukankan      html  css  js  c++  java
  • OutOfMemoryError异常

    OutOfMemoryError的原因有哪些?怎么解决?


    参考答案

    OutOfMemoryError 分为多种不同的错误:

    • Java heap space

    原因:JVM 中 heap 的最大值不满足需要
    解决:
    调高 heap 的最大值,-Xmx 的值调大
    如果程序存在内存泄漏,增加 heap 空间也只是推迟该错误出现的时间而已,要检查程序是否存在内存泄漏

    • GC overhead limit exceeded

    原因:JVM 在 GC 时,对象过多,导致内存溢出
    解决:调整 GC 的策略,在一定比例下开始GC而不使用默认的策略,或将新代和老代设置合适的大小,可以微调存活率。如在老代 80% 时就是开始GC,并且将 -XX:SurvivorRatio(-XX:SurvivorRatio=8)和-XX:NewRatio(-XX:NewRatio=4)设置的更合理

    • Java perm space

    原因:JVM 中 perm 的最大值不满足需要,perm 一般是在 JVM 启动时加载类进来
    解决:调高 heap 的最大值,即 -XX:MaxPermSize 的值调大解决。如果 JVM 运行较长一段时间而不是刚启动后溢出的话,很有可能是由于运行时有类被动态加载,此时可以用 CMS 策略中的类卸载配置解决如:-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled

    • unable to create new native thread

    原因:当 JVM 向系统请求创建一个新线程时,系统内存不足无法创建新的 native 线程
    解决:JVM 内存调的过大或者可利用率小于 20%,可以将 heap 及 perm 的最大值下调,并将线程栈内存 -Xss 调小,如:-Xss128k

    • Requested array size exceeds VM limit

    原因:应用程序试图分配一个大于堆大小的数组
    解决:
    检查 heap 的 -Xmx 是不是设置的过小
    heap 的 -Xmx 已经足够大,检查应用程序是不是存在 bug 计算数组的大小时存在错误,导致数组的 length 很大,从而导致申请巨大的数组

    • request XXX bytes for XXX. Out of swap space

    原因:从 native 堆中分配内存失败,并且堆内存可能接近耗尽,操作系统配置了较小的交换区,其他进程消耗所有的内存
    解决:检查操作系统的 swap 是不是没有设置或者设置的过小;检查是否有其他进程在消耗大量的内存,导致 JVM 内存不够分配

    转载自:https://www.javanav.com/interview/8163710edd514d2db5165009db9858f3.html

  • 相关阅读:
    marquee基本语法和marquee的相关参数设置
    [转]FreeTextBox使用详解
    div+css三级下拉菜单无限制下拉
    让Flash在Firefox和IE下背景透明
    asp.net制作幻灯片
    图片连续滚动代码,左右连续,上下连续不间断滚动
    纯DIV+CSS下拉菜单
    连续滚动图片代码
    sql语句修改access中的字段类型,access数据类型大全!
    非常棒的图片连续滚动代码
  • 原文地址:https://www.cnblogs.com/k-class/p/13782639.html
Copyright © 2011-2022 走看看