Java 7 String - сложность подстроки

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

25
задан anoopelias 20 April 2013 в 19:01
поделиться

2 ответа

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

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

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

8
ответ дан ILMTitan 20 April 2013 в 19:01
поделиться

Это просто дурацкий способ исправить некоторые ограничения сборки мусора в JVM.

До Java 7, если мы хотим избежать проблемы с сборкой мусора, мы всегда можем скопировать подстроку вместо сохранения ссылки на подстроку. Это был просто дополнительный вызов конструктора копирования:

String smallStr = new String(largeStr.substring(0,2));

Но теперь мы больше не можем иметь подстроку с постоянным временем. Какая катастрофа.

4
ответ дан Alex 20 April 2013 в 19:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: