【发布时间】:2018-02-01 20:29:20
【问题描述】:
除了坏习惯...
我们实现了一个 Java 线程 Runnable 并在其 run() 中有一个 while(true) 做一些事情。 while 中的第一件事是 try/catch/finally 说,如果有任何东西被捕获,就睡觉,然后“退出”(这会一直持续下去)。
如果在更高级别的线程之外存在OutOfMemory 问题,线程会完全死掉吗?如果是这样,try/catch/finally 不会 catch 因为 OOM 的执行超出了该范围?
线程是否会被垃圾收集(它不优雅地死了)。
TLDR:如果Runnable 得到OutOfMemory,它会死掉并停止在其轨道上,还是在执行范围内抛出异常?
run(){
while(true){
try {
stuff
} catch{ //blah
} finally{sleep}
}
}
【问题讨论】:
-
您是在谈论
OutOfMemory抛出在try块内还是来自不同的线程? -
@tsolakp 看起来像是在休眠线程中被抛出。
WARN org.hibernate.engine.loading.internal.CollectionLoadContext:389 - HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [10] entries Exception in thread "http-bio-8080-exec-25" java.lang.OutOfMemoryError: GC overhead limit exceeded。不久之后,我意识到while没有启动。
标签: java garbage-collection runnable