爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      第二季:5.请谈谈你对OOM的认识【Java面试题】

      首页 知识中心 软件开发 文章详情页

      第二季:5.请谈谈你对OOM的认识【Java面试题】

      2024-04-18 09:07:17 阅读次数:47

      java,jvm

       

      5.请谈谈你对OOM的认识

      说明

      本文目录前是相关视频的名字和具体视频中思维导图的名字

      题目

      5.请谈谈你对OOM的认识

      java.lang.StackOverflowError 81

      package oom5;
      
      /**
       * @author CSDN@日星月云
       * @date 2022/10/12 22:21
       */
      public class StackOverflowErrorDemo {
          
          public static void main(String[] args) {
              stackOverflowError();
          }
      
          private static void stackOverflowError() {
              stackOverflowError();//Exception in thread "main" java.lang.StackOverflowError
          }
      }
      
      

      第二季:5.请谈谈你对OOM的认识【Java面试题】

      java.lang.OutOfMemoryError: Java heap space 82

      package oom5;
      
      import java.util.Random;
      
      /**
       * @author CSDN@日星月云
       * @date 2022/10/12 22:27
       */
      
      //-Xms10m -Xmx10m
      public class JavaHeapSpaceDemo {
          public static void main(String[] args) {
      //        String str="atguigu";
      //        while (true){
      //            str+=str+new Random().nextInt(11111111)+new Random().nextInt(22222222);
      //            str.intern();
      //        }
               byte[] bytes=new byte[80*1024*1024];
               
              //Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
          }
      }
      
      

      java.lang.OutOfMemoryError: GC overhead limit exceeded 83

      第二季:5.请谈谈你对OOM的认识【Java面试题】

      package oom5;
      
      import java.util.ArrayList;
      import java.util.List;
      
      /**
       * @author CSDN@日星月云
       * @date 2022/10/12 22:35
       * JVM参数配置演示
       * -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:MaxDirectMemorySize=5m
       *
       * GC回收时间过长时会抛出OutOfMemoryError。过长的定义是,超过98%的时间用来做Gc并且回收了不到2%的堆内存
       * 连续多次GC都只回收了不到2%的极端情况下才会抛出。假如不抛出 GC overhead limit错误会发生什么情况呢?
       * 那就是GC清理的这么点内存很快会再次填满,迫使GC再次执行.这样就形成恶性循环,
       * CPU使用率一直是100%,而GC却没有任何成果
       */
      public class GCOverheadDemo {
          public static void main(String[] args) {
              int i=0;
              List<String> list=new ArrayList<>();
      
              try {
                  while (true){
                      list.add(String.valueOf(++i).intern());
                  }
              } catch (Throwable e) {
                  System.out.println("*******i"+i);//*******i145921
                  e.printStackTrace();
                  throw e;
              }
          }
          //java.lang.OutOfMemoryError: GC overhead limit exceeded
      }
      
      
      [GC (Allocation Failure) [PSYoungGen: 2048K->480K(2560K)] 2048K->904K(9728K), 0.0020932 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
      [GC (Allocation Failure) [PSYoungGen: 2528K->481K(2560K)] 2952K->2641K(9728K), 0.0024917 secs] [Times: user=0.06 sys=0.00, real=0.00 secs] 
      [GC (Allocation Failure) [PSYoungGen: 2529K->488K(2560K)] 4689K->4509K(9728K), 0.0029540 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
      [GC (Allocation Failure) [PSYoungGen: 2536K->504K(2560K)] 6557K->6566K(9728K), 0.0031731 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 504K->0K(2560K)] [ParOldGen: 6062K->6197K(7168K)] 6566K->6197K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0486435 secs] [Times: user=0.09 sys=0.00, real=0.05 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2048K->782K(2560K)] [ParOldGen: 6197K->7041K(7168K)] 8245K->7824K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0296614 secs] [Times: user=0.13 sys=0.01, real=0.03 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2048K->2026K(2560K)] [ParOldGen: 7041K->7041K(7168K)] 9089K->9068K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0281900 secs] [Times: user=0.09 sys=0.00, real=0.03 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2048K->2047K(2560K)] [ParOldGen: 7041K->7041K(7168K)] 9089K->9089K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0181646 secs] [Times: user=0.05 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7041K->7041K(7168K)] 9089K->9089K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0166141 secs] [Times: user=0.06 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7042K->7042K(7168K)] 9090K->9090K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0168942 secs] [Times: user=0.11 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7044K->7044K(7168K)] 9092K->9092K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0176037 secs] [Times: user=0.01 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7046K->7046K(7168K)] 9094K->9094K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0169613 secs] [Times: user=0.02 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7048K->7048K(7168K)] 9096K->9096K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0176020 secs] [Times: user=0.05 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7049K->7049K(7168K)] 9097K->9097K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0189166 secs] [Times: user=0.05 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7051K->7051K(7168K)] 9099K->9099K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0181470 secs] [Times: user=0.05 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7053K->7053K(7168K)] 9101K->9101K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0171954 secs] [Times: user=0.06 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7055K->7055K(7168K)] 9103K->9103K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0177783 secs] [Times: user=0.09 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7056K->7056K(7168K)] 9104K->9104K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0169006 secs] [Times: user=0.02 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7058K->7058K(7168K)] 9106K->9106K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0170453 secs] [Times: user=0.01 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7060K->7060K(7168K)] 9108K->9108K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0179109 secs] [Times: user=0.02 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7062K->7062K(7168K)] 9110K->9110K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0163138 secs] [Times: user=0.01 sys=0.02, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7063K->7063K(7168K)] 9111K->9111K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0174088 secs] [Times: user=0.02 sys=0.01, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7065K->7065K(7168K)] 9113K->9113K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0173568 secs] [Times: user=0.08 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7067K->7067K(7168K)] 9115K->9115K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0209319 secs] [Times: user=0.09 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7069K->7069K(7168K)] 9117K->9117K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0199145 secs] [Times: user=0.02 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7070K->7070K(7168K)] 9118K->9118K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0193262 secs] [Times: user=0.01 sys=0.02, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7072K->7072K(7168K)] 9120K->9120K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0206345 secs] [Times: user=0.06 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7074K->7074K(7168K)] 9122K->9122K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0162711 secs] [Times: user=0.14 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7076K->7076K(7168K)] 9124K->9124K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0226319 secs] [Times: user=0.00 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7077K->7077K(7168K)] 9125K->9125K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0314767 secs] [Times: user=0.06 sys=0.00, real=0.03 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7079K->7079K(7168K)] 9127K->9127K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0168665 secs] [Times: user=0.01 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7081K->7081K(7168K)] 9129K->9129K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0183938 secs] [Times: user=0.05 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7083K->7083K(7168K)] 9131K->9131K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0200589 secs] [Times: user=0.06 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7084K->7084K(7168K)] 9132K->9132K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0207044 secs] [Times: user=0.01 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7086K->7086K(7168K)] 9134K->9134K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0185979 secs] [Times: user=0.06 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7088K->7088K(7168K)] 9136K->9136K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0220039 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7090K->7090K(7168K)] 9138K->9138K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0233020 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7091K->7091K(7168K)] 9139K->9139K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0168573 secs] [Times: user=0.06 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7093K->7093K(7168K)] 9141K->9141K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0182798 secs] [Times: user=0.05 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7095K->7095K(7168K)] 9143K->9143K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0331386 secs] [Times: user=0.05 sys=0.00, real=0.03 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7097K->7097K(7168K)] 9145K->9145K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0174839 secs] [Times: user=0.08 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7098K->7098K(7168K)] 9146K->9146K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0178674 secs] [Times: user=0.01 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7100K->7100K(7168K)] 9148K->9148K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0219387 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7102K->7102K(7168K)] 9150K->9150K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0168792 secs] [Times: user=0.05 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7106K->7106K(7168K)] 9154K->9154K(9728K), [Metaspace: 3265K->3265K(1056768K)], 0.0171701 secs] [Times: user=0.05 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7108K->7088K(7168K)] 9156K->9136K(9728K), [Metaspace: 3268K->3268K(1056768K)], 0.0269909 secs] [Times: user=0.06 sys=0.00, real=0.03 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7095K->7094K(7168K)] 9143K->9142K(9728K), [Metaspace: 3269K->3269K(1056768K)], 0.0216285 secs] [Times: user=0.05 sys=0.00, real=0.02 secs] 
      *******i145921
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7139K->7119K(7168K)] 9187K->9167K(9728K), [Metaspace: 3302K->3302K(1056768K)], 0.0258615 secs] [Times: user=0.01 sys=0.00, real=0.03 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7143K->7121K(7168K)] 9191K->9169K(9728K), [Metaspace: 3340K->3340K(1056768K)], 0.0235428 secs] [Times: user=0.11 sys=0.00, real=0.02 secs] 
      java.lang.OutOfMemoryError: GC overhead limit exceeded
      	at java.lang.Integer.toString(Integer.java:401)
      	at java.lang.String.valueOf(String.java:3099)
      	at oom5.GCOverheadDemo.main(GCOverheadDemo.java:24)
      Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
      [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7132K->7122K(7168K)] 9180K->9170K(9728K), [Metaspace: 3349K->3349K(1056768K)], 0.0170922 secs] [Times: user=0.06 sys=0.00, real=0.02 secs] 
      [Full GC (Ergonomics) [PSYoungGen: 2047K->0K(2560K)] [ParOldGen: 7131K->648K(7168K)] 9179K->648K(9728K), [Metaspace: 3363K->3363K(1056768K)], 0.0051668 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
      Heap
       PSYoungGen      total 2560K, used 86K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000)
        eden space 2048K, 4% used [0x00000000ffd00000,0x00000000ffd15a38,0x00000000fff00000)
        from space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
        to   space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
       ParOldGen       total 7168K, used 648K [0x00000000ff600000, 0x00000000ffd00000, 0x00000000ffd00000)
        object space 7168K, 9% used [0x00000000ff600000,0x00000000ff6a22a8,0x00000000ffd00000)
       Metaspace       used 3381K, capacity 4500K, committed 4864K, reserved 1056768K
        class space    used 368K, capacity 388K, committed 512K, reserved 1048576K
      	at java.lang.Integer.toString(Integer.java:401)
      	at java.lang.String.valueOf(String.java:3099)
      	at oom5.GCOverheadDemo.main(GCOverheadDemo.java:24)
      
      Process finished with exit code 1
      
      

      java.lang.OutOfMemoryError: Direct buffer memory 84

      Netty + NIO:这是由于NIO引起的

      写NIO程序的时候经常会使用ByteBuffer来读取或写入数据,这是一种基于通道(Channel) 与 缓冲区(Buffer)的I/O方式,它可以使用Native 函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在Java堆和Native堆中来回复制数据。

      ByteBuffer.allocate(capability):第一种方式是分配JVM堆内存,属于GC管辖范围,由于需要拷贝所以速度相对较慢

      ByteBuffer.allocteDirect(capability):第二种方式是分配OS本地内存,不属于GC管辖范围,由于不需要内存的拷贝,所以速度相对较快

      但如果不断分配本地内存,堆内存很少使用,那么JVM就不需要执行GC,DirectByteBuffer对象就不会被回收,这时候怼内存充足,但本地内存可能已经使用光了,再次尝试分配本地内存就会出现OutOfMemoryError,那么程序就崩溃了。

      一句话说:本地内存不足,但是堆内存充足的时候,就会出现这个问题

      我们使用 -XX:MaxDirectMemorySize=5m 配置能使用的堆外物理内存为5M

      -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:MaxDirectMemorySize=5m
      然后我们申请一个6M的空间

      // 只设置了5M的物理内存使用,但是却分配 6M的空间
      ByteBuffer bb = ByteBuffer.allocateDirect(6 * 1024 * 1024);
      这个时候,运行就会出现问题了

      配置的maxDirectMemory:5.0MB

      第二季:5.请谈谈你对OOM的认识【Java面试题】

      package oom5;
      
      import java.nio.ByteBuffer;
      
      /**
       * @author CSDN@日星月云
       * @date 2022/10/12 22:50
       *
       * 配置参数:
       * -Xms10m -Xmx10m -XX:+PrintGcDetails -XX:NMaxDirectMemorySize=5m
       * 
       * 故障现象:
       * Exception in thread "main" java.Lang.OutOfMemoryError: Direct buffer memory
       * 
       * 导致原因:
       * 写NIo程序经常使用ByteBuffer来读取或者写入数据,这是一种基于通道(Channel )与缓冲区(Buffer)的I/O方式,
       * 它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。
       * 这样能在一些场景中显著提高性能,因为避免了在Java堆和 Native堆中来回复制数据。
       * 
       * ByteBuffer.allocate(capability)第一种方式是分配JVA堆内存,属于cc管辖范围,由于需要拷贝所以速度相对较慢
       * 
       * ByteBuffer.allocateDirect(capability)第一种方式是分配Os本地内存,不属于cc管辖范围,由于不需要内存拷贝所以速度相对较快。
       * 
       * 但如果不断分配本地内存,堆内存很少使用,那么JV就不需要执行GC,DirectByteBuffer对象们就不会被回收,
       * 这时候堆内存充足,但本地内存可能已经使用光了,再次尝试分配本地内存就会出现outOfMemoryError,那程序就直接崩溃了。
       * 
       */
      public class DirectBufferMemoryDemo {
          public static void main(String[] args) {
              System.out.println("配置的maxDirectMemory:"+(sun.misc.VM.maxDirectMemory())/(double)1024/1024+"MB");//1676.5MB
      
              //tsleep
              try{ Thread.sleep(3000); }catch (InterruptedException e){ e.printStackTrace(); }
      
              //-XX:MaxDirectMemorySize=5m 我们配置为5MB,但实际使用6M,故意使坏
              ByteBuffer bb = ByteBuffer.allocateDirect(6 * 1024 * 1024);
      
          }
          //配置的maxDirectMemory:5.0MB
          //Exception in thread "main" java.lang.OutOfMemoryError: Direct buffer memory
      }
      
      
      配置的maxDirectMemory:5.0MB
      [GC (Allocation Failure) [PSYoungGen: 2047K->504K(2560K)] 2047K->916K(9728K), 0.0015213 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
      [GC (System.gc()) [PSYoungGen: 1218K->488K(2560K)] 1630K->1160K(9728K), 0.0011058 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
      [Full GC (System.gc()) [PSYoungGen: 488K->0K(2560K)] [ParOldGen: 672K->995K(7168K)] 1160K->995K(9728K), [Metaspace: 3784K->3784K(1056768K)], 0.0069488 secs] [Times: user=0.06 sys=0.00, real=0.01 secs] 
      Exception in thread "main" java.lang.OutOfMemoryError: Direct buffer memory
      	at java.nio.Bits.reserveMemory(Bits.java:658)
      	at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123)
      	at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
      	at oom5.DirectBufferMemoryDemo.main(DirectBufferMemoryDemo.java:19)
      Heap
       PSYoungGen      total 2560K, used 69K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000)
        eden space 2048K, 3% used [0x00000000ffd00000,0x00000000ffd11450,0x00000000fff00000)
        from space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
        to   space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
       ParOldGen       total 7168K, used 995K [0x00000000ff600000, 0x00000000ffd00000, 0x00000000ffd00000)
        object space 7168K, 13% used [0x00000000ff600000,0x00000000ff6f8c58,0x00000000ffd00000)
       Metaspace       used 3814K, capacity 4536K, committed 4864K, reserved 1056768K
        class space    used 422K, capacity 428K, committed 512K, reserved 1048576K
      
      Process finished with exit code 1
      
      

      java.lang.OutOfMemoryError: unable to create new native thread 85 86

      不能够创建更多的新的线程了,也就是说创建线程的上限达到了

      在高并发场景的时候,会应用到

      高并发请求服务器时,经常会出现如下异常java.lang.OutOfMemoryError:unable to create new native thread,准确说该native thread异常与对应的平台有关

      导致原因:
      1 应用创建了太多线程,一个应用进程创建多个线程,超过系统承载极限
      2 服务器并不允许你的应用程序创建这么多线程,linux系统默认运行单个进程可以创建的线程为1024个,如果应用创建超过这个数量,就会报 java.lang.OutOfMemoryError:unable to create new native thread

      解决方法:
      1想办法降低你应用程序创建线程的数量,分析应用是否真的需要创建这么多线程,如果不是,改代码将线程数降到最低
      2对于有的应用,确实需要创建很多线程,远超过linux系统默认1024个线程限制,可以通过修改linux服务器配置,扩大linux默认限制

      windows下运行

      ************** i = 78600
      ************** i = 78601
      ************** i = 78602
      ************** i = 78603
      ************** i = 78604
      [thread 340756 also had an error]
      An unrecoverable stack overflow has occurred.
      [thread 340772 also had an error]
      An unrecoverable stack overflow has occurred.
      [thread 340776 also had an error]
      An unrecoverable stack overflow has occurred.
      [thread 340780 also had an error]
      An unrecoverable stack overflow has occurred.
      [thread 340796 also had an error]
      Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
      	at java.lang.Thread.start0(Native Method)
      	at java.lang.Thread.start(Thread.java:714)
      	at oom5.UnableCreateNewThreadDemo.main(UnableCreateNewThreadDemo.java:29)
      
      Process finished with exit code -1073741571 (0xC00000FD)
      
      

      这个时候,就会出现下列的错误,线程数大概在 900多个

      Exception in thread "main" java.lang.OutOfMemoryError: unable to cerate new native thread
      

      非root用户登陆Linux系统测试

      服务器级别调参调优

      如何查看线程数

      ulimit -u
      

      第二季:5.请谈谈你对OOM的认识【Java面试题】

      第二季:5.请谈谈你对OOM的认识【Java面试题】
      第二季:5.请谈谈你对OOM的认识【Java面试题】

      java.lang.OutOfMemoryError: Metaspace 87

      使用java -XX:+PrintFlagslnitial命令查看本机的初始化参数,-XX:Metaspacesize为21810376B(大约20.8M)
      

      第二季:5.请谈谈你对OOM的认识【Java面试题】

      package oom5;
      
      
      /**
       * @author CSDN@日星月云
       * @date 2022/10/12 23:23
       * JVM参数
       * -XX:MetaspaceSize=8m -XX:MaxMetaspaceSize=8m
       *
       * Java 8及之后的版本使用Metaspace来替代永久代。
       *
       * WMetaspace是方法区在HotSpot中的实现,它与持久代最大的区别在于:Metaspace并不在虚拟机内存中而是使用本地内存
       * 也即在java8中, classe metadata(the virtual machines internal presentation of Java class),被存储在叫做
       * Metaspace的native memory
       *
       * 永久代(java8后被原空间Metaspace取代了)存放了以下信息:
       *
       * 虚拟机加载的类信息
       * 常量池
       * 静态变量
       * 即时编译后的代码
       *
       * 模拟Metaspace空间溢出,我们不断生成类往元空间灌,类占据的空间总是会超过Metaspace指定的空问大小的
       */
      public class MetaspaceOOMDemo {
          static class OOMTest{
      
          }
      
          public static void main(String[] args) {
              int i=0;//模拟计数多少次以后发生异常
              try {
                  while (true){
                      i++;
                      // 使用Spring的动态字节码技术
                      Enhancer enhancer = new Enhancer();
                      enhancer.setSuperclass(OOMTest.class);
                      enhancer.setUseCache(false);
                      enhancer.setCallback(new MethodInterceptor() {
                          @Override
                          public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
                              return methodProxy.invokeSuper(o, args);
                          }
                      });
                      enhancer.create();
                  }
              }catch (Throwable e){
                  System.out.println("*******多少次后发生异常:"+i);
                  e.printStackTrace();
              }
          }
          //发生异常的次数: 201
          //java.lang.OutOfMemoryError:Metaspace
      }
      
      

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://jsss-1.blog.csdn.net/article/details/127291945,作者:日星月云,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:Maven插件开发简明教程(1)

      下一篇:当你开始学习 Python 时,这是一个简单的学习计划及当你初学 Python 时,这里有几个建议

      相关文章

      2025-05-14 10:02:58

      java休眠到指定时间怎么写

      java休眠到指定时间怎么写

      2025-05-14 10:02:58
      java , sleep , Thread , util , 方法
      2025-05-14 10:02:58

      java项目多端数据同步解决方案

      多端数据同步是指在多个设备(例如桌面应用、移动应用、Web应用)之间保持数据的一致性。

      2025-05-14 10:02:58
      java , Spring , WebSocket , 同步 , 数据 , 版本号
      2025-05-13 09:49:12

      Java学习(动态代理的思想详细分析与案例准备)(1)

      Java学习(动态代理的思想详细分析与案例准备)(1)

      2025-05-13 09:49:12
      java , 代理 , 代码 , 对象 , 接口 , 方法 , 需要
      2025-05-09 08:20:32

      基于IDEA的Maven简单工程创建及结构分析

      通过一个 mvn 命令直接让我们创建一个 Maven 的脚手架。

      2025-05-09 08:20:32
      java , Maven , xml , 创建 , 文件 , 文件夹 , 项目
      2025-05-08 09:03:57

      前K个高频元素java

      给定一个非空的整数数组,返回其中出现频率前 前K个高频元素java 高的元素。

      2025-05-08 09:03:57
      java , 元素 , 样例 , 给定
      2025-05-08 09:03:21

      基于java Swing开发的学生成绩管理系统【项目源码+数据库脚本】

      基于java Swing开发的学生成绩管理系统【项目源码+数据库脚本】

      2025-05-08 09:03:21
      java , Swing , 学生 , 源码
      2025-05-08 09:03:21

      java Swing学生成绩管理系统【项目源码+数据库脚本】

      本项目是一套基于java Swing开发的学生成绩管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。

      2025-05-08 09:03:21
      java , 学生 , 成绩 , 数据库 , 源码
      2025-05-07 09:08:08

      java Swing学生选课管理系统【源码+数据库+报告】

      本项目是一套基于java Swing学生选课管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。

      2025-05-07 09:08:08
      java , 学生 , 截图 , 源码
      2025-05-07 09:08:08

      java swing人机对战五子棋(含背景音乐)

      本项目是一套基于java swing的人机对战五子棋系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。

      2025-05-07 09:08:08
      java , 源码
      2025-04-22 09:40:08

      【ETL工具】kettle 程序报错 Javascript error: TypeError: Cannot call method “trim“ of null

      【ETL工具】kettle 程序报错 Javascript error: TypeError: Cannot call method “trim“ of null

      2025-04-22 09:40:08
      java , javascript , org
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5255207

      查看更多

      最新文章

      java项目多端数据同步解决方案

      2025-05-14 10:02:58

      Java学习(动态代理的思想详细分析与案例准备)(1)

      2025-05-13 09:49:12

      前K个高频元素java

      2025-05-08 09:03:57

      基于java Swing开发的学生成绩管理系统【项目源码+数据库脚本】

      2025-05-08 09:03:21

      java Swing学生成绩管理系统【项目源码+数据库脚本】

      2025-05-08 09:03:21

      java swing人机对战五子棋(含背景音乐)

      2025-05-07 09:08:08

      查看更多

      热门文章

      JAVA__接口的作用

      2023-04-18 14:14:13

      Java学习之算术运算符两只老虎

      2023-04-19 09:23:13

      排序算法Java版-归并排序算法

      2023-04-24 11:25:19

      JAVA多线程学习笔记

      2023-05-11 06:05:48

      try...catch...finally java

      2023-03-29 09:40:26

      Java:apache.poi读写Excel文件

      2023-02-22 06:40:54

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      Java 对象如何安全的 toString

      S2-007 远程代码执行漏洞检测与利用

      java实现双向链表的增删改查

      Knife4j注解【Swagger2 、 OpenAPI3】

      程序员之路:MySQL存储引擎_彭世瑜_新浪博客

      Java API 基础操作ES

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号