kvisaz (kvisaz) wrote,
kvisaz
kvisaz

Когда одна капля переполняет полторы чашки

Вот одна иллюстрация инфляции Мура и опасности АКП при разработке - работа массива ArrayList в Java. Правильно говорить "коллекции", потому что это обёртка над обычным массивом.

Обычные массивы в Java имеют фиксированный размер, который задаётся при их инициализации. Это неудобно для программистов - а вдруг срочно понадобится 150 покупателей в списке, а у нас только 100? Поэтому придумали ArrayList, который по функционалу очень сильно похож на обычный массив, но позволяет добавлять в себя сколько угодно элементов.

А теперь как это реализовано. Каждый раз, когда я хочу добавить элемент в ArrayList - он сначала проверяет, не переполнился ли внутренний настоящий массив (у которого жесткие размеры, как я сказал). Вообще от того, что я хочу, тут ничего не зависит - эта операция будет выполняться, если элемент в ArrayList захочет добавить даже Путин, даже Обама, даже небо, даже Аллах!

То есть уже тут мы кое-что немножко теряем, дополнительные микросекунды. Но это цветочки. Ягодки в том, что если ArrayList видит, что выделенное место уже все забито - он создаёт для элементов новый стандартный массив, который в 1,5 раза больше предыдущего.

То есть внимание! Вы еще здесь? Вот такая реализация ArrayList вполне может привести (и приводит) к тому, что добавление одного маленького элемента к большому массиву вызовет НЕОЖИДАННОЕ И ПОЛНОЕ забитие всей доступной памяти.

Поэтому Java-программисты и получают много, поэтому и имеет смысл учить этот верхне-сибирский говор (по Пелевину). Сначала ты восторгаешься богатством и удобством языка, затем понимаешь, что без знания подводных камней ты не Лев Толстой.

Ссылка в тему - http://habrahabr.ru/post/128269/
Ссылка в тему 2 - http://habrahabr.ru/post/233797/
Tags: java, программирование
Subscribe

Recent Posts from This Journal

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 7 comments