zoukankan      html  css  js  c++  java
  • 谈谈你对OOM的理解?

    (1)整体架构

         

    (1)ByteBuffer使用native方法,直接在堆外分配内存。 当堆外内存(也即本地物理内存)不够时,就会抛出这个异常     ----GC Direct buffer memory  

    (2)在高并发应用场景时,如果创建超过了系统默认的最大线程数,就会抛出该异常。Linux单个进程默认不能超过1024个线程。

            解决方法要么降低程序线程数,要么修改系统最大线程数vim /etc/security/limits.d/90-nproc.conf ------------unable to create new native thread

    (3) OOM—Metaspace  -----元空间满了就会抛出这个异常。 java8以后元空间不在jvm中,属于本地内存,当创建对象的数目超出指定元空间大小时抛出此异常

        

     (3)常见的OOM异常报错情况:

    • (1)OutOfMemoryError 栈满会抛出该错误。无限递归就会导致StackOverflowError
    • (2)OOM—Java head space 栈满抛出的错误
    • (3)OOM—GC overhead limit exceeded     频繁GC,但是JVM垃圾回收效果不明显
    • (4)OOM—GC Direct buffer memory        产生内存在JVM内存外面,并且超过最大内存限制
    • (5)OOM—unable to create new native thread       创建线程数超过系统承载极限(Linux默认承载1024)
    • (6)OOM—Metaspace        老年代满了或者元空间满了之后会抛出此异常
    
    

    模拟场景代码:gitHub地址

    推荐参考笔记:JVM笔记

    推荐参考博客:OOM的理解

    Java半颗糖
  • 相关阅读:
    [Trie][并查集]JZOJ 5822 量子纠缠
    [模拟]JZOJ 5820 非法输入
    SAM模板
    [树形DP]JZOJ 5819 大逃杀
    [MST][dij]JZOJ 5818 做运动
    [暴力]JZOJ 5817 抄代码
    [概率期望][树形DP][LCA]JZOJ 5814 树
    认证组件
    注册接口
    视图家族 & 路由组件
  • 原文地址:https://www.cnblogs.com/2019wxw/p/11755837.html
Copyright © 2011-2022 走看看