Мне было интересно, какой будет лучший способ сохранить некоторые ресурсы и память в моем тестовом приложении. Я знаю, что создание объектов поглощает память и замедляет приложение, а в приложении для этого кода нужен случай переключения значений String. Так что было бы лучше? Оператор if else для всех строковых значений, чтобы назначить каждому из них целочисленный тег и использовать случай переключения или создать Enumerator и использовать переключатель напрямую?
Количество записей = 40-50.
Я знаю, что создание объектов поглощает память и замедляет работу приложения...
Это обобщение проблематично:
Да, создание объекта требует памяти и требует времени, но это не обязательно замедляет работу приложения. Это зависит от того, что альтернатива созданию объекта. Вполне возможно, что альтернатива замедляет приложение больше.
И даже если предположить, что версия "создать объект" использует больше ресурсов, чем альтернативу, есть хороший шанс, что разница не будет значительной.
То, что вы, кажется, делаете здесь, - преждевременная оптимизация. Мой совет:
Что касается особенностей вашего прецедента, неясно, каким будет наиболее эффективное решение. Это зависит от того, как формируются строки, сколько ветвей есть в инструкции switch и тому подобное. Трудно предсказать, не профилируя приложение с реалистичными входными данными.
Третий вариант, который вы не упомянул, заключается в использовании enum
вместо String
или int
. Это будет более аккуратным, чем реализация преобразования String
to int
с использованием предварительно заполненного HashMap
или чего-то еще.
Не беспокойтесь об этом. Новый оператор переключения Java 7 автоматически делает это за вас.
При компиляции коммутатор со строковыми случаями преобразуется в два переключателя. Первая отображает каждую строку в уникальное целое число - его положение в исходном коммутаторе. Это делается путем первого включения хэш-кода метки. Соответствующим случаем является оператор if, который проверяет равенство строк; если в хеше есть столкновение, тест является каскадным if-else-if. Второй переключатель отражает это в исходном исходном коде, но заменяет метки меток соответствующими позициями. Этот двухэтапный процесс упрощает сохранение управления потоком исходного коммутатора.
Просто откиньтесь, сделайте глоток кофе, и пусть компилятор + JVM сделает для вас тяжелый подъем. Выполнение микро-оптимизации в таких случаях, скорее всего, приведет к снижению производительности, чем к помощи.