Итак, я провожу небольшой эксперимент, чтобы выяснить, насколько далеко может зайти рекурсия в языке Java, поскольку я беру урок по параллелизму и изучаю механизмы потоков Java.Прямо сейчас я использую четырехъядерный процессор Intel i5 с 2,8 ГГц и 4 ГБ оперативной памяти.Я работаю на Windows 7 с x64 и в Eclipse со стандартным JRE?Не уверен насчет последней части, которую я только что скачал с веб-сайта Sun.
В любом случае,
public class StacksizeTest implements Runnable {
int depth = 0;
public void run()
{
try
{
doOverflow();
}
catch (StackOverflowError e)
{
System.out.print("Overflow ocurred at depth " + depth + ".\n");
}
}
void doOverflow()
{
depth += 1;
doOverflow();
}
public static void main(String argv[])
{
Thread mt = new Thread(new StacksizeTest());
mt.start();
mt.run();
}
}
Я также работаю с размером стека вызовов по умолчанию, который, я уверен, составляет 512 МБ в соответствии св файл настроек.
Поэтому, когда я запускаю программу и запускаю новый поток, я продолжаю получать переменную глубину, а также печатать оператор печати дважды.Я думаю, что оператор print имеет смысл, потому что он должен запускать mt в новом потоке.Что меня смущает, так это если я исключаю .start () и просто вызываю .run (), «глубина» всегда одинакова (около 11 500 или около того), но когда я использую .start (), я получаю переменную глубину,пара была 22789, 22330 и 22381. Мне трудно понять, почему это так.Может ли кто-нибудь пролить свет на этот вопрос?
Спасибо,
Мэтт