2010-11-23 2 views
1

Я только что прочитал статью в документах BlackBerry о writing efficient code in J2ME.Нестационарные статические строки более эффективны, чем статические конечные строки?

В этой статье есть раздел, который советует вам использовать статические переменные для строк. Причиной является то, что, поскольку компилятор в строках static final ссылается как строковые литералы, лучше оставить его нефиналивым (я полагаю, предположение заключается в том, что получение статической ссылки дешевле, чем извлечение из пула строк?).

Это правда для всех JVM? Мой босс на моей последней работе ударил его в головы, чтобы мы всегда, всегда использовали static final для наших констант. Мы занимались встроенным программированием на Java, поэтому он был настоящим приверженцем производительности (хотя я не уверен в этом случае, был ли он больше связан с памятью или скоростью). Мой босс уже много лет занимается Java и действительно знает его вещи, поэтому я принял его совет; теперь я получаю противоречивые советы!

Итак, какой из них действительно лучше? Вы можете ответить либо с точки зрения сохранения памяти, либо с точки зрения скорости, и для J2ME или J2SE.

+7

Возможно, вы должны использовать статический финал. Пусть машина делает то, что она делает, чтобы определить, должно ли что-то быть встроено. Кроме того, если вы беспокоитесь о производительности встраивания строки и ее вызова, java, вероятно, не является подходящим языком для работы в – Falmarri 2010-11-23 23:57:28

+0

Когда вы программируете интерфейс для Android или BlackBerry, у вас нет выбора языков , Но помимо этого, всегда лучше знать, что происходит под капотом! Да ладно, мужик, это принципиально! Вы не подчиняетесь машинам, машины подчиняются вам! Кроме того, почему это комментарий, а не ответ? – 2010-11-24 00:27:46

ответ

3

В целом, они должны быть одинаковыми. (С то же определяется как достаточно близко, что он никогда не будет когда-либо значения)

Я бы очень сильно поспорить, что вы должны кодировать ваши намерения (т.е. имеющий статический против нестатическая-Несс определяется, является ли это класс константы по сравнению с экземпляром постоянная), а не какое-то произвольное «повышения производительности»

Если вы обнаружите, что это является серьезной проблемой производительности (и только ПОСЛЕ того, как измерить его!), я бы классифицировать его как компилятор/JVM и поместите обходное решение (свопинг его статичности) на месте с комментарием, указывающим, почему.

Смежные вопросы