2015-08-26 43 views
-3

我想知道jvm如何防止infinte循环崩溃系统。照顾它的内部过程。jvm如何防止infinte循环崩溃系统?

+5

它并不妨碍它...而且无限循环不会使系统崩溃,它只会挂起(无响应)应用程序... – Codebender

+3

为什么无限循环会使系统崩溃?也许如果系统正在等待你的程序做某事,并且无限循环会阻止你的程序做这件事。但现代系统通常不会等待程序做事。 – immibis

+1

为什么无限循环会使系统崩溃? –

回答

0

当我们在我们的操作系统上安装Java的时候,一些默认的内存大小被提供给JVM运行并执行它的过程。如果你的任何程序进入无限循环,那么它有可能使用完整的内存提供给JVM,但它不能使用超出该内存的内存,这只会让您的系统工作缓慢,因为线程数量和调用堆栈上存在的方法调用数量。但系统从不崩溃。这种情况下的一般错误是StackOverFlowError,这是java确保任何程序都不会使用超过分配给JVM的内存的方法。

+0

没有'调用堆栈中的语句'。 – EJP

1

虚拟机不会阻止,甚至也不希望它不知道它是否应该停止循环执行,除非它在循环内发现错误,而这些错误不是由内部逻辑处理的。可能是内存已满,堆栈溢出,IO错误。

一些应用程序打算有一个无限循环。例如,一个无限循环的调度程序应用程序,并检查其循环逻辑中的某些事件的时间表。或者一个持续等待网页请求的Web服务器。这些应用程序将无限循环,虚拟机必须允许它们这样做。只要逻辑能够“正确”处理所有事情,就像负责任地管理自己的资源一样。

这是应用程序的责任,以防止坏事发生在做无限循环,而不是虚拟机。虚拟机只是为了确保程序指令的执行正确,正如应用程序所预期的那样,并管理资源处理(内存,时间,I/O等)。