В чем разница между переполнением стека и индексами массива? - PullRequest
0 голосов
/ 13 декабря 2010

Кажется, что в действительности они должны быть почти идентичны Вы ссылаетесь или размещаете данные там, где их не должно быть.

Ответы [ 5 ]

3 голосов
/ 13 декабря 2010

StackOverflowError происходит во время бесконечных рекурсивных вызовов.Это не имеет ничего общего с массивами.ArrayIndexOutOfBoundsException происходит, когда вы пытаетесь использовать индекс, превышающий размер массива.

2 голосов
/ 13 декабря 2010

Эти два на самом деле очень разные вещи. Как уже упоминали другие парни, ArrayIndexOutOfBoundsException - это исключение, которое возникает, когда вы пытаетесь получить доступ к массиву с использованием неверного индекса. Это может быть вызвано очень простой ошибкой в ​​логике программирования.

StackOverflowError - это нечто более низкое. Это не имеет ничего общего с массивами и, вопреки тому, что сказали другие парни, также не имеет ничего общего с кучей. Попробуйте проделать этот трюк со списком, и вместо этого вы получите ошибку OutOfMemoryError. Теперь это ошибка, которая намного больше похожа на StackOverflowError, чем ArrayIndexOutOfBoundsException. И OutOfMemoryError, и StackOverflowError указывают, что вам не хватает памяти, только в разных сегментах. Из-за бесконечной рекурсии почти всегда происходит нехватка стековой памяти (если только у вас нет смехотворно длинной цепочки методов, вызывающих друг друга с большим количеством локальных переменных в них), а нехватка памяти в куче происходит, когда вы выделяете слишком много и сохраняете все эти ссылки, так что даже сборщик мусора не может освободить память для вас.

Таким образом, когда ArrayIndexOutOfBoundsException действительно «прилипает к данным, куда они не должны идти», StackOverflowError и OutOfMemoryError лучше описать как «нехватка памяти для вставки данных».

2 голосов
/ 13 декабря 2010

StackOverFlowError: Происходит, когда у JVM ( Виртуальная память Java ) заканчивается выделенное пространство кучи.

ArrayIndexOutOfBoundsException: Происходит приприложение пытается получить доступ к индексу массива, который не попадает в заявленный диапазон.

2 голосов
/ 13 декабря 2010

arrayindexoutofbounds: исключение, которое выдается при попытке чтения за пределами массива.

stackoverflow: ошибка, возникающая при переполнении стека.

0 голосов
/ 13 декабря 2010

Arrayindexoutofbounds: Вы ограничиваете свою переменную, например, определяете массив размером 50, и если вы хотите использовать элемент 51. этого массива, вы получаете это исключение.

Stackoverflow: Подумайте, например, что вы не ограничивали свою переменную;

List myList = new List();

И вы добавляете элементы в этот список.

myList.add(something);

Если вы добавите слишком много элементов, чтобы ваша кучная память не могла выделить больше места для хранения вашей переменной, это вызовет это исключение.

Сначала ваш лимит составляет 50, на 51 вы получаете исключение, на втором вы не получаете исключение на 51. элемент, если ваша куча достаточно свободна, но вы можете получить исключение, когда вашей кучи недостаточно для вас.

...