当前位置: 首页 > news >正文

网站建设方案书制作模板制作网站杭州

网站建设方案书制作,模板制作网站杭州,域名被墙检测网站,做学习交流网站深入解析 OOM 的三大场景 什么是 OOM#xff1f;一、堆内存溢出 ( Heap OOM )原因分析解决方案 二、栈内存溢出#xff08;Stack OOM#xff09;原因分析解决方案 三、方法区内存溢出#xff08;Metaspace OOM#xff09;原因分析解决方案 在Java应用程序开发中#xff0… 深入解析 OOM 的三大场景 什么是 OOM一、堆内存溢出 ( Heap OOM )原因分析解决方案 二、栈内存溢出Stack OOM原因分析解决方案 三、方法区内存溢出Metaspace OOM原因分析解决方案 在Java应用程序开发中OutOfMemoryErrorOOM是一个令人头痛的问题。当JVM中的内存无法满足应用程序的需求时就会抛出这个错误。本文将深入探讨OOM的三大场景堆内存溢出、方法区内存溢出和栈内存溢出并分析它们的原因提供相应的实战解决方案。 什么是 OOM OOM 的全称是 Out Of Memory那我们的内存区域有哪些会发生 OOM 呢我们可以从内存区域划分图上看一下彩色部分 可以看到除了程序计数器其他区域都有OOM溢出的可能。但是最常见的还是发生在堆内存溢出、方法区内存溢出和栈内存溢出主要是在堆上。 另外我们常说的 OOM 异常其实是 Error 一、堆内存溢出 ( Heap OOM ) Java 堆用于存储对象实例我们只要不断的创建对象并且保证 GC Roots 到对象之间有可达路径来避免 GC 清除这些对象那随着对象数量的增加总容量触及堆的最大容量限制后就会产生内存溢出异常。 Java 堆内存的 OOM 异常是实际应用中最常见的内存溢出异常。 /*** JVM参数-Xmx10m*/ public class JavaHeapSpaceDemo {static final int SIZE 100 * 1024 * 1024;public static void main(String[] a) {int[] i new int[SIZE];} }代码试图分配容量为 100M 的 int 数组如果指定启动参数 -Xmx10m分配内存就不够用就类似于将 XXXL 号的对象往 S 号的 Java heap space 里面塞。 原因分析 对象过多应用程序创建了大量的对象并且这些对象长时间存活导致堆内存不足。内存泄漏应用程序中存在内存泄漏即长时间无法释放不再使用的对象导致堆内存持续占用。超出预期的访问量/数据量通常是上游系统请求流量飙升常见于各类促销/秒杀活动可以结合业务流量指标排查是否有尖状峰值 解决方案 针对大部分情况通常只需要通过 -Xmx 参数调高 JVM 堆内存空间即可。如果仍然没有解决可以参考以下情况做进一步处理 优化代码减少不必要的对象创建避免过大的集合和数组。如果是内存泄漏需要找到持有的对象修改代码设计比如关闭没有释放的连接如果是业务峰值压力可以考虑添加机器资源或者做限流降级。 二、栈内存溢出Stack OOM 栈内存溢出通常与线程的执行和递归调用有关。 public class StackOverflowErrorDemo {public static void main(String[] args) {javaKeeper();}private static void javaKeeper() {javaKeeper();} }原因分析 递归调用过深最常见原因递归算法实现不当导致递归深度过大超出了线程栈的大小限制。线程创建过多应用程序创建了大量的线程并且每个线程的栈内存分配过多导致系统资源耗尽。 解决方案 修复引发无限递归调用的异常代码 通过程序抛出的异常堆栈找出不断重复的代码行按图索骥修复无限递归 Bug 排查是否存在类之间的循环依赖 通过 JVM 启动参数 -Xss 增加线程栈内存空间 某些正常使用场景需要执行大量方法或包含大量局部变量这时可以适当地提高线程栈空间限制 三、方法区内存溢出Metaspace OOM 方法区内存溢出通常与类的加载和元数据的存储有关。 JDK 1.8 之前会出现 Permgen space该错误表示永久代Permanent Generation已用满通常是因为加载的 class 数目太多或体积太大。随着 1.8 中永久代的取消就不会出现这种异常了。 Metaspace 是方法区在 HotSpot 中的实现它与永久代最大的区别在于元空间并不在虚拟机内存中而是使用本地内存但是本地内存也有打满的时候所以也会有异常。 /*** JVM Options: -XX:MetaspaceSize10m -XX:MaxMetaspaceSize10m*/ public class MetaspaceOOMDemo {public static void main(String[] args) {while (true) {Enhancer enhancer new Enhancer();enhancer.setSuperclass(MetaspaceOOMDemo.class);enhancer.setUseCache(false);enhancer.setCallback((MethodInterceptor) (o, method, objects, methodProxy) - {//动态代理创建对象return methodProxy.invokeSuper(o, objects);});enhancer.create();}} }借助 Spring 的 GCLib 实现动态创建对象 Exception in thread main org.springframework.cglib.core.CodeGenerationException: java.lang.OutOfMemoryError--Metaspace方法区溢出也是一种常见的内存溢出异常在经常运行时生成大量动态类的应用场景中就应该特别关注这些类的回收情况。这类场景除了上边的 GCLib 字节码增强和动态语言外常见的还有大量 JSP 或动态产生 JSP 文件的应用远古时代的传统软件行业可能会有、基于 OSGi 的应用即使同一个类文件被不同的加载器加载也会视为不同的类等。 原因分析 加载过多的类每个类在加载到JVM时都会占用一定的方法区空间。如果程序加载了大量的类那么方法区可能会被占满导致OOM。类加载器泄漏如果类加载器没有正确地释放已经加载的类那么这些类将一直占用方法区空间导致方法区溢出。动态生成类在使用诸如JSP、反射或ASM等技术动态生成类时如果生成过多的类或频繁地生成和卸载类可能会导致方法区溢出 解决方案 限制方法区大小通过-XX:MaxMetaspaceSize参数设置方法区的最大值避免无限制增长。这需要根据应用程序的实际情况进行调整。检查类加载器实现确保自定义的类加载器正确实现了资源的释放避免类加载器泄露。同时注意检查和升级可能导致泄露的第三方库。优化类加载策略按需加载和卸载类避免不必要的类加载。可以考虑使用模块化技术如OSGi来管理类的加载和卸载。
http://www.zqtcl.cn/news/999357/

相关文章:

  • 做h5商城网站pc网站建设哪
  • 顺企网萍乡网站建设自己如何开自己的商城
  • 怎样做当地网站推广平顶山车祸最新新闻事件
  • 重庆网站制作1000客户营销
  • 视频播放网站 模板潍坊网站建设首荐创美网络
  • 网站静态页面模板网页设计案例代码
  • 网站开发的ie兼容做到9网站开发具体问题
  • 企业建站业务还能做吗园林景观网站模板
  • 建筑招聘网站有哪些电商商城app制作开发
  • 做网站开发 用什么在进行网站设计时
  • 21dove谁做的的网站新媒体营销论文
  • 做电影网站配什么公众号网站新闻发布系统模板
  • 网站风格发展趋势wordpress悬浮音乐插件
  • 做网站前期费用新注册公司网站建设
  • 建站平台在线提交表格功能检测站点是否使用wordpress
  • 谁能做网站开发免费软件看电视剧
  • 深圳的网站建设网站建设网页设计做网站
  • 广州网站建设网页设计贵阳网站建设宏思锐达
  • 洪栾单页网站建设象山县城乡和住房建设局网站
  • 网站留言发送到邮箱潍坊商城网站建设
  • 四川省的住房和城乡建设厅网站首页产品设计是冷门专业吗
  • 北仑建设银行网站网站设计 导航条
  • 如何做网站宣传片单位做网站费用怎么记账
  • 西安网站建设现状购物app开发
  • 2019年做网站还有前景吗手机制作表格教程
  • 校园网站html模板南昌网站建设优化
  • 网站的建立目的来宾网站优化
  • 建设国家游戏网站网站建设规范方案
  • 做网站价位wordpress tag 列表
  • 网站建设 李奥贝纳百度软文推广公司