Проблема заключается в том, как AbstractList.java (базовый класс ArrayList) реализует метод subList.Он создает подсписок (он же вид) с помощью родительского указателя, смещения и размера.Если вы вызываете subList для такого подсписка, вы получаете родительский указатель, указывающий на список, который сам имеет родительский указатель (и т.Если у вас очень глубокая иерархия родительских указателей, вы получаете StackOverflowError.
В следующем фрагменте показана изолированная проблема:
public static void main(String[] args) {
List<String> lst = new ArrayList<String>();
lst.add("");
for (int i = 0; i < 50000; i++) {
lst.set(0, "test");
lst = lst.subList(0, 1);
}
lst.add("test2");
}
Вывод: не используйте рекурсивный сублист, например:*
breadCrumbs = breadCrumbs.subList(0, breadCrumbs.indexOf(newViewID) + 1);
Вместо этого установите длину, удалив элементы с конца.
Более подробный анализ в моем блоге: http://programmingtipsandtraps.blogspot.com/2013/05/javautillistsublist-stackoverflowerror.html