分类
devops

OOB and OOM

这两个缩写是完全不同的概念,虽然都常出现在程序错误或系统日志里:

  • OOB 通常指 Out Of Bounds:越界访问。
  • OOMOut Of Memory:内存耗尽 / 内存溢出。

具体区别可以这样理解:


OOB:Out Of Bounds(越界)

  • 场景:
    • 访问数组、列表、缓冲区时,下标超过合法范围,比如长度是 10 却访问 index=10 或 -1。
    • 访问内存时指针跑出了分配区域。
  • 本质:
    • 访问到了不属于该数据结构或该进程应该访问的地址范围
  • 后果:
    • 轻则抛异常(如 Java 的 IndexOutOfBoundsException)。
    • 重则引发未定义行为、段错误(segfault)、安全漏洞(比如越界读写敏感数据)。

关键词:“位置越界”,问题出在“访问范围”。


OOM:Out Of Memory(内存耗尽 / 溢出)

  • 场景:
    • 程序申请新对象/数组时,系统或运行时已经没有足够的可用内存。
    • 例如 JVM 抛出 java.lang.OutOfMemoryError: Java heap space,或者 Linux 的 OOM Killer 把进程干掉。
  • 本质:
    • 需要的内存超过了系统或运行时能提供的上限,或者之前申请的内存没被释放,导致整体可用内存耗尽。 blog.csdn
  • 后果:
    • 分配失败,抛出严重错误(Error),应用不可恢复地崩溃或被系统杀死。

关键词:“资源不够”,问题出在“内存总量”。


放在一起对比一句话

  • OOB:你有这块内存/数组,但你访问的位置超出了合法边界,是“坐标错了”。
  • OOM:你想要更多内存,但整个系统已经给不起,是“资源没了”。