Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么应用程序遇到OutOfMemoryError时其他进程仍在运行_Java - Fatal编程技术网

Java 为什么应用程序遇到OutOfMemoryError时其他进程仍在运行

Java 为什么应用程序遇到OutOfMemoryError时其他进程仍在运行,java,Java,我们在日志文件中遇到错误“java.lang.OutOfMemoryError:请求的数组大小超过VM限制”,其他进程也在该错误后运行 为什么在出现上述错误后,其他进程也在运行 所有java.lang.OutOfMemoryError错误是否会阻止整个应用程序 假设有10个线程,其中一个线程因OutofMemory错误而失败。在这种情况下,所有线程都将被阻塞,或者其他9个线程将继续该进程 记录器消息示例: example...(QuartzScheduler.java:2166) - Job (

我们在日志文件中遇到错误“java.lang.OutOfMemoryError:请求的数组大小超过VM限制”,其他进程也在该错误后运行

  • 为什么在出现上述错误后,其他进程也在运行

  • 所有java.lang.OutOfMemoryError错误是否会阻止整个应用程序

  • 假设有10个线程,其中一个线程因OutofMemory错误而失败。在这种情况下,所有线程都将被阻塞,或者其他9个线程将继续该进程

    记录器消息示例:

    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。因此,在你的情况下:

  • 如上所述,只删除失败的线程

  • 对于quartz,所有
    OutOfMemoryError
    s将以相同的方式处理(与所有其他错误一样),但是,大多数其他错误通常会使VM处于不一致的状态。“请求的数组大小超过VM限制”是一个比较少见的错误,完全可以恢复,因为它们只影响一个线程

  • “OutOfMemoryError”只是一个例外,但很少能成功处理。如果/当它波及到线程堆栈的底部时,将调用线程默认处理程序。该处理程序可能会也可能不会决定执行流程的其余部分。