Java 为什么应用程序遇到OutOfMemoryError时其他进程仍在运行
我们在日志文件中遇到错误“java.lang.OutOfMemoryError:请求的数组大小超过VM限制”,其他进程也在该错误后运行Java 为什么应用程序遇到OutOfMemoryError时其他进程仍在运行,java,Java,我们在日志文件中遇到错误“java.lang.OutOfMemoryError:请求的数组大小超过VM限制”,其他进程也在该错误后运行 为什么在出现上述错误后,其他进程也在运行 所有java.lang.OutOfMemoryError错误是否会阻止整个应用程序 假设有10个线程,其中一个线程因OutofMemory错误而失败。在这种情况下,所有线程都将被阻塞,或者其他9个线程将继续该进程 记录器消息示例: example...(QuartzScheduler.java:2166) - Job (
example...(QuartzScheduler.java:2166) - Job (DEFAULT.jobLaunchStatusPoller threw an
exception. org.quartz.SchedulerException: Job threw an unhandled exception. [See nested
exception: java.lang.OutOfMemoryError: Requested array size exceeds VM limit] at
org.quartz.core.JobRunShell.run(JobRunShell.java:210) at
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546) Caused by:
java.lang.OutOfMemoryError: Requested array size exceeds VM limit [Mar 17 13:32:24]
[3578814] WARN [PollingScheduler_Worker-19] (JobExecutor.java:54) - Job Execution
Started.
谢谢。看看:
Quartz为其线程设置一个未捕获的异常处理程序,该处理程序捕获可丢弃的Throwable
,然后用新线程重新填充其线程池
通常(没有quarz或任何其他set UncaughtExceptionHandler),错误会传播到默认处理程序,默认处理程序将退出VM并打印stacktrace。因此,在你的情况下:
OutOfMemoryError
s将以相同的方式处理(与所有其他错误一样),但是,大多数其他错误通常会使VM处于不一致的状态。“请求的数组大小超过VM限制”是一个比较少见的错误,完全可以恢复,因为它们只影响一个线程