这两个缩写是完全不同的概念,虽然都常出现在程序错误或系统日志里:
- OOB 通常指 Out Of Bounds:越界访问。
- OOM 指 Out Of Memory:内存耗尽 / 内存溢出。
具体区别可以这样理解:
OOB:Out Of Bounds(越界)
- 场景:
- 访问数组、列表、缓冲区时,下标超过合法范围,比如长度是 10 却访问 index=10 或 -1。
- 访问内存时指针跑出了分配区域。
- 本质:
- 访问到了不属于该数据结构或该进程应该访问的地址范围。
- 后果:
- 轻则抛异常(如 Java 的
IndexOutOfBoundsException)。 - 重则引发未定义行为、段错误(segfault)、安全漏洞(比如越界读写敏感数据)。
- 轻则抛异常(如 Java 的
关键词:“位置越界”,问题出在“访问范围”。
OOM:Out Of Memory(内存耗尽 / 溢出)
- 场景:
- 程序申请新对象/数组时,系统或运行时已经没有足够的可用内存。
- 例如 JVM 抛出
java.lang.OutOfMemoryError: Java heap space,或者 Linux 的 OOM Killer 把进程干掉。
- 本质:
- 需要的内存超过了系统或运行时能提供的上限,或者之前申请的内存没被释放,导致整体可用内存耗尽。 blog.csdn
- 后果:
- 分配失败,抛出严重错误(Error),应用不可恢复地崩溃或被系统杀死。
关键词:“资源不够”,问题出在“内存总量”。
放在一起对比一句话
- OOB:你有这块内存/数组,但你访问的位置超出了合法边界,是“坐标错了”。
- OOM:你想要更多内存,但整个系统已经给不起,是“资源没了”。