В структуре данных, разработанной для эффективности, если вы часто используете временные int или float, лучше ли сделать это полем? - PullRequest
2 голосов
/ 04 декабря 2011

Немного больше предыстории, у меня есть структура данных, которая при удалении, добавлении или просто получении я временно использую в качестве временного хранилища в качестве методов хранения. Вместо того, чтобы просить новое место в памяти, чтобы поместить этот float, и сборщик мусора должен собрать его несколькими строками позже, было бы лучше зарезервировать пространство как поле, тогда мы просто меняем значение, а не приходится постоянно тратить время на сборку мусора и перераспределение памяти?

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

Ответы [ 2 ]

4 голосов
/ 04 декабря 2011

Нет, просто используйте локальную переменную для этой цели. Традиционно локальной переменной выделяется место в кадре стека процедур или, возможно, просто в машинном регистре. В любом случае, взаимодействие с сборщиком мусора не является проблемой: хранение переменной исчезает, когда кадр стека выталкивается и процедура возвращается.

2 голосов
/ 04 декабря 2011

Вы не должны использовать переменные экземпляра для временных расположений для методов.

  • Переменные экземпляра занимают место на объекте; то есть они делают это больше. Пространство используется до тех пор, пока объект существует. Вероятно, будет больше экземпляров, чем вызовов метода, поэтому даже если бы для этого была веская причина, размещение временных переменных в переменных экземпляра, скорее всего, будет занимать больше места, чем альтернатива.

  • Переменные экземпляра совместно используются всеми потоками, которые используют конкретный экземпляр, а также реентерабельными (рекурсивными) вызовами объекта в том же потоке. Если вы используете их для удержания временных файлов, вы рискуете, если один вызов метода / поток создаст помехи другому.

Вместо этого используйте локальные переменные. Вот для чего они предназначены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...