码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 08-JVM中的内存溢出


    文章目录

    • 简介
      • 何为内存溢出
      • 内存溢出的原因
    • 内存溢出实践
      • 大对象导致堆内存溢出
      • 频繁创建对象导致内存溢出
      • 小节面试分析

    简介

    何为内存溢出

    内存中剩余的内存不足以分配给新的内存请求就会内存溢出。内存溢出可能直接导致系统崩溃。

    内存溢出的原因

    内存泄漏是导致内存溢出的一种原因,但内存溢出不全是由内存泄漏引起的,还可能是:
    1)创建的对象太大导致堆内存溢出
    2)创建的对象太多导致堆内存溢出
    3)方法出现了无限递归调用导致栈内存溢出
    4)方法区内存空间不足导致内存溢出。

    内存溢出实践

    大对象导致堆内存溢出

    第一步:编写如下代码,例如

    package com.java.jvm.oom;
    /**
     * JVM 参数配置
     * 1)最大堆-Xmx5m
     * 2)最小堆-Xms5m
     */
    public class BigObjectOOMTests {
        public static void main(String[] args) {
            byte[] array=new byte[1024*1024*5];
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    第二步:idea中配置JVM运行参数,设置最大堆、最小堆内存大小,例如
    在这里插入图片描述
    第三步:运行程序出现OutOfMemoryError异常
    在这里插入图片描述

    频繁创建对象导致内存溢出

    第一步:编写如下代码,例如:

    package com.java.jvm.oom;
    
    import java.sql.Time;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    
    /**
     *  JVM 参数配置
     *  1)最大堆-Xmx100m
     *  2)最小堆-Xms100m
     */
    public class ManyObjectOOMTests {
        public static void main(String[] args)throws Exception {
            List<byte[]> list=new ArrayList<>();
            while(true) {
                byte[] array = new byte[1024 * 1024];
                list.add(array);
                TimeUnit.MILLISECONDS.sleep(500);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    第二步:idea中配置JVM运行参数,设置最大堆、最小堆内存大小,例如
    在这里插入图片描述
    第三步:运行程序,基于VisualVM监控内存变化(VisualVM需要安装GC插件),例如:

    在这里插入图片描述

    第四步:当年轻代、老年代都满的时候,打开idea控制台,检查是否出现了OutOfMemoryError异常。例如:
    在这里插入图片描述

    小节面试分析

    1. 何为内存溢出?
    2. 你知道哪些内存溢出类型?
    3. 如何更好避免内存溢出?
  • 相关阅读:
    基于matlab GUI的数字图像处理系统
    基于K8s构建Jenkins持续集成平台(部署流程)(转了一点)
    双容水箱液位无线监控模型的设计与实现(MATLAB)
    4. xaml Button按钮
    用IO多路复用实现 nginx 静态资源代理(C/Java/Golang)
    HA: VEDAS靶机
    CSS之定位Position
    springboot vue3 elementui plus校园二手交易平台源码
    [springboot]结合redis详述声明式缓存注解的使用-Cacheable、CacheEvict、CachePut、Caching
    代码应该怎么写?
  • 原文地址:https://blog.csdn.net/maitian_2008/article/details/124913921
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号