美文网首页
为什么会堆内存溢出

为什么会堆内存溢出

作者: Lisong | 来源:发表于2019-05-13 17:24 被阅读0次

    在年轻代中经过GC 后还存活的对象会被复制到老年代中。当老年代空间不足时,JVM会对老年代进行完全的垃圾回收(full GC)。如果GC后,还是无法存放从 Survivor去复制过来的对象,就会出现 OOM(Out of Memory)

    OOM 异常常见的原因

    • 老年代内存不足
      java.lang.OutOfMemoryError:Javaheapspace

    • 永久代内存不足
      java.lang.OutOfMemoryError:PermGenspace

    • 代码BUG,占用内存无法及时回收

    OOM在几个内存区都有可能出现,实际遇到OOM时,能根据异常信息定位到哪个区的内存溢出。可以通过添加参数 -XX:+HeapDumpOnOutMemoryError ,让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便事后分析

    java启动调优配置

    JAVA_OPTS="-server -Xms512m -Xmx2g -XX:+UseG1GC -XX:SurvivorRatio=6 -XX:MaxGCPauseMillis=400 -XX:G1ReservePercent=15 -XX:ParallelGCThreads=4 -XX:
    
    ConcGCThreads=1 -XX:InitiatingHeapOccupancyPercent=40 -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps -Xloggc:../logs/gc.log"
    

    相关文章

      网友评论

          本文标题:为什么会堆内存溢出

          本文链接:https://www.haomeiwen.com/subject/ptyraqtx.html