2013-03-11 3 views
-2

Я имею в виду, когда программа бесконечно рекурсивно, а компьютер исчерпывает память, java-компилятор бросает стек над ошибкой потока или ошибкой памяти?Разница между StackOverFlow и OutOfMemory?

Я вполне уверен, что его из памяти, но это была долгая ночь с небольшим сном, может кто-нибудь прояснить это для меня?

+1

http://stackoverflow.com/questions/4959172/java-root-cause-java-lang-outofmemoryerror-error и http://stackoverflow.com/questions/214741/what-is-a-stack-overflow -error – PSR

+0

Я думаю, что это зависит от того, где вы хотите выделить память, на стек (что означает локальные переменные) (или) на куче? Если из-за рекурсии или чего-то еще из-за переполнения стека, это будет StackOverflow, иначе OutOfMemory. – kosa

+0

тест кажется довольно тривиальным. Устанавливая память JVM на небольшое значение, вы можете протестировать это, не нарушая работу ОС. –

ответ

1

Обычно вы получаете исключение переполнения стека.

Это означает, что это может быть либо в зависимости от того, будет ли в первую очередь исчерпана память стека, либо память кучи. Это, в свою очередь, зависит от того, сколько памяти стека/кучи требуется для каждого рекурсивного вызова и сколько доступно (размер кучи и размер стека могут быть настроены независимо друг от друга).

+0

http://stackoverflow.com/questions/11435613/whats-the-difference-between-stackoverflowerror-and-outofmemoryerror/29563736#29563736 –