Защо Imutable String са по-ефективни в сравнение с Changeable

Бях чел някъде в книгата, че неизменният низ може да бъде внедрен по-ефективно от променливия.

Колко неизменни низове са по-ефективни в сравнение с променящите се?

Имам предвид каква е внедряващата разлика между неизменен и променлив низ, която прави неизменния низ по-ефективен...??


person uveng    schedule 24.05.2014    source източник
comment
Имате някои несъответствия във вашия въпрос/заглавие, които може да искате да изчистите... Променлив означава същото нещо като променлив   -  person awksp    schedule 24.05.2014
comment
Коя книга и какъв беше контекстът? Приложено по-ефективно може да означава много неща. Абсолютно по-лесно е да имплементирате основен клас като String по неизменен начин: изисква по-малко код, избягвайте главоболия със състезания с данни при многонишково програмиране, надеждните проверки за сигурност са по-лесни за внедряване и т.н. означава по-ефективно за изпълнение?   -  person Erwin Bolwidt    schedule 24.05.2014
comment
The Complete Reference 7-мо издание страница №: 359   -  person uveng    schedule 24.05.2014
comment
да, питам за по-ефективно изпълнение.   -  person uveng    schedule 24.05.2014


Отговори (4)


Прочетете тук.

Както променливите, така и неизменните обекти имат свои собствени приложения, плюсове и минуси.

Неизменните обекти наистина правят живота по-прост в много случаи. Те са особено приложими за типове стойности, където обектите нямат идентичност, така че да могат лесно да бъдат заменени. И те могат да направят едновременното програмиране по-безопасно и по-чисто (повечето от известните трудни за намиране грешки при паралелност в крайна сметка са причинени от променливо състояние, споделено между нишките). Въпреки това, за големи и/или сложни обекти, създаването на ново копие на обекта за всяка отделна промяна може да бъде много скъпо и/или досадно. А за обекти с различна идентичност промяната на съществуващ обект е много по-проста и интуитивна от създаването на ново, модифицирано негово копие.

Помислете за герой в играта. В игрите скоростта е основен приоритет, така че представянето на вашите герои в играта с променливи обекти най-вероятно ще направи играта ви да работи значително по-бързо от алтернативна реализация, при която за всяка малка промяна се създава ново копие на героя в играта.

Освен това нашето възприятие за реалния свят неизбежно се основава на променливи обекти. Когато зареждате колата си с гориво на бензиностанцията, вие я възприемате като един и същ обект през цялото време (т.е. нейната идентичност се запазва, докато състоянието й се променя) - не като че старата кола с празен резервоар е заменена с последователно нова автомобилни екземпляри, като резервоарът им постепенно се пълни все повече и повече. Така че винаги, когато моделираме някакъв домейн от реалния свят в програма, обикновено е по-просто и по-лесно да внедрим модела на домейн, като използваме променливи обекти за представяне на обекти от реалния свят.

person Achintya Jha    schedule 24.05.2014

Кеширането на низове е възможно с неизменни низове, което може да ускори производителността. От друга страна е много ПО-МАЛКО ефективно да използвате неизменен низ, ако ще свържете много големи низове заедно.

person Mikayla Maki    schedule 24.05.2014

Няма да кажа, че неизменните обекти са по-ефективни; той е по-предпочитан, въпреки че не е толкова ефективен, колкото променливите обекти

професионалисти

  • Лесен за поддръжка
  • Нишка безопасна

Лесно поддържаем означава, че след като бъде създаден неизменен обект, състоянието му не може да бъде променено (по погрешка), когато го предавате около няколко бизнес слоя; следователно намалява броя на дефектите, свързани с неправилна промяна на състоянието

Можете също да споделяте неизменния обект в многонишкова среда, без да се притеснявате за конфликти на данни, тъй като състоянието на обекта не може да бъде променено.

напр.: BigDecimal

минуси

  • Въздействие върху производителността

Както можете да си представите, е необходим нов обект за всяко състояние/данни. Можете да подобрите малко производителността, като внедрите механизъм за кеширане за популярни стойности.

напр.: BigDecimal.ZERO

Като се има предвид това, трябва да се опитате да създадете вашия обект на потребителски домейн възможно най-неизменен (чрез предоставяне на ограничени методи за настройка), тъй като предимството на лесното поддържане на неизменен обект превъзхожда производителността на променлив обект.

person Kalyan    schedule 24.05.2014

Неизменността на низовете прави възможно споделянето им, това е по-ефективно от гледна точка на паметта.

person Evgeniy Dorofeev    schedule 24.05.2014