OOM 错误

OOM 错误

1:OutOfMemoryError

  • 堆内存溢出,这种情况是最常见的,一般是由于内存泄漏或者是堆设置过小造成的。堆的大小可以通过Xms,Xmn进行调节
  • PermGen溢出,也就是方法区溢出了产生了大量的class对象在方法区,这种情况可以更改方法区的大小来解决。过多的常量尤其是字符串也会造成方法区溢出
  • 栈溢出,即StackOverFolw,一般是由于死循环或者是深度调用造成的,或者是栈过小。一般设置Xss来设置栈的大小

2:为什么会有OOM

  • 内存分配的少了,自身本来就少。
  • 应用用的太多,用完没有释放,白白的浪费了
  • 内存泄露
    • 申请使用完的内存没有释放,导致系统不能再次使用这段内存
  • 内存溢出
    • 申请的内存超出了JVM所能够提供的内存,此时就是溢出

3:JVM的内存模型

  • PC,程序计数器

  • 虚拟机栈

    • Java方法执行的内存模型
    • 每一个Java方法的调用都有入栈和出栈的过程
  • 本地方法栈

    • 为native 方法提供内存环境
    • 对象分配的地方,内存垃圾回收的主要区域
  • 方法区

    • 用于存储已经被JVM加载的类信息,常量信息,静态变量。Hotspot中的永久代
    • JDK8 中完全的移除了永久代
      • 字符串存在永久代中,容易出现性能问题和内存的溢出
      • 永久代的大小不容易确定,常常出现OOM
      • 永久代会为垃圾回收带来不必要的复杂度,而且回收的效率偏低
    • 元空间使用的是本地内存,而永久代使用的是JVM内存
  • 运行时常量池

    • 方法区的一部分,存储各种的常量,比如各种的字面量,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值