我想知道jvm如何阻止infinte循环崩溃系统。处理它的内部过程。
答案 0 :(得分:1)
VM不会阻止,甚至它想要,它不知道它是否应该停止循环执行,除非它在循环内看到一个错误,它不是由内部逻辑处理的。可能是内存已满,堆栈溢出,IO错误。
某些应用程序旨在具有无限循环。例如,一个调度程序应用程序无限循环并检查其循环逻辑中某些内容的调度。或者是一个持续等待网页请求的Web服务器。这些应用程序将无限循环,VM必须允许它们这样做。只要逻辑能够“正确”地管理自己的资源负责任。
应用程序有责任通过执行无限循环来防止坏事发生,而不是VM。 VM仅用于确保程序指令的执行正确,如应用程序所预期的那样,并管理资源处理(内存,时间,I / O等)。
答案 1 :(得分:0)
当我们在我们的操作系统上安装Java时,会向JVM提供一些默认的内存大小来运行并执行其过程。如果你的任何程序进入无限循环,那么它可能会使用完整的提供给JVM的内存但它不能使用超出该内存的内存,这只会使您的系统因为线程数和调用堆栈上存在的方法调用次数而变慢。但系统永远不会崩溃。这种情况下的一般错误是StackOverFlowError,它是一种java确保任何程序不会使用超过分配给JVM的内存的方式。