Why does Java forkcomb not cause stackoverflowerror?

I'm a new programmer. I'm trying to teach myself what causes stackoverflow I play with loops and cause errors, but the forkcomb code I test does not cause errors Why?

public class ForkBomb
{
  public static void main(String[] args) throws java.io.IOException 
  {
     while(true) 
    {
        Runtime.getRuntime().exec(new String[]{"java","-cp",System.getProperty("java.class.path"),"ForkBomb"});
    }
  }
}

This does not cause a stack overflow Why? However, this leads to a:

public class WhileBomb
{
   public WhileBomb()
   {
      while (true)
      {
      new WhileBomb();
      }
   }

   public static void main(String[] args) throws java.io.IOException
   {
     WhileBomb goodBye = new WhileBomb();
   }
}

Solution

Each thread has its own stack When you create a new process, you also get a new thread and a new stack A stack overflow error occurs when filling a single stack, but you create many different stacks, none of which is full

In the second example, you have only one thread and you have a recursive call Each time a method is called, some information is temporarily stored on the stack until the method returns Because your method will never return, the stack will be consumed until you get a stack overflow exception

You don't even need a while loop This also generates a stack overflow exception:

public WhileBomb()
{
   new WhileBomb();
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>