Что лучше использовать: синглтон или статический утилитарный класс?

1,00
р.
Столкнулся с задачей, которую в равной степени можно решить двумя способами. Класс, допустим DeviceState обращается к устройству десятки раз в секунду, поэтому каждый раз создавать экземпляр не вариант.
Нужно использовать или синглтон или сделать класс статическим. И так и так работает. Не могу определиться с выбором. По удобству, вроде как, статический выигрывает. Есть ли какая-то разница по памяти и в быстродействии?
/ingleton DeviceState ds = ModbusMaster.getDeviceState() //там происходит return DeviceState.getInstance(connParams) System.out.println(ds.getLedState())
//full static DeviceState.refreshData() System.out.println(DeviceState.ledState)

Ответ
Думаю, в вашем случае лучше всё-таки использовать синглтон. Вот хорошая статья на эту тему:
Если Ваш синглтон не поддерживает ни одного состояния, а просто обеспечивает доступ к методам, лучше рассмотреть использование статического класса, так как статические методы гораздо быстрее синглтона, благодаря статичному связыванию во время компиляции. Если по Вашим требованиям необходимо поддержать состояние, то в таком случае синглтон является лучшим выбором, чем статический класс, потому что поддержание состояния в последнем случае — кошмар, и ведет к неочевидным ошибкам.
А так как у вас сам класс называется DeviceState, думаю, он должен поддерживать разные состояния, значит, нужен синглтон.
Что касается производительности:
Статический класс предоставляет большую производительность, чем синглтон, потому что статические методы связываются во время компиляции.
Но думаю, что особенной разницы в производительности вы не заметите, а стилистически правильнее будет использовать синглтон.