🗒️线程堆溢出会影响其他线程吗
2023-10-6
| 2023-10-8
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
在应用程序中,创建一个线程去处理复杂的任务时,这个线程保存数据过多导致堆栈 OOM 了,会导致整个应用程序退出吗?
答案是不会。
这里堆堆溢出和栈溢出两种情况进行测试。

堆溢出

在 JVM 中,通过 -Xms10m -Xmx10m 参数限制堆内存使用的大小,执行下面的测试程序:
程序创建了一个线程,并且等待 1 s,任由新线程不断地申请一片内存空间。1 s后,主程序继续打印信息。新线程在这 1 s内,已经足够申请超出限制的内存值了,会导致 OOM 错误。
打印输出如下:
end 信息成功打印,说明单独的线程堆溢出后,不会影响其他线程继续执行。并且主程序中还能继续申请内存空间,说明在线程 OOM 后,其申请的空间也被垃圾回收器处理释放了。

栈溢出

在 JVM 中,通过 -Xss1m 参数限制栈内存使用的大小,执行下面的测试程序:
程序创建了一个 TestThread 类,其在运行时会循环调用 loop 函数,导致栈空间用尽。
打印输出如下:
end 信息成功打印,说明单独的线程栈溢出后,不会影响其他线程继续执行。
 
相关文章 :
  • JVM
  • FlinkCDC 全量数据分片过程Java 类卸载
    Loading...
    目录