Различия в производительности между статическими и нестатическими конечными примитивными полями в Java

Недавно я наткнулся на класс, в котором было объявлено следующее поле:

private final int period = 1000;

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

В частности:

1) Как хранятся конечные статические примитивы? Компилируются ли они просто непосредственно в выражения, в которых они используются?

2) Если они действительно выделены для хранения, должен ли каждый экземпляр содержащего класса поддерживать ссылку на это место? (в этом случае для примитивов размером менее 4 байтов каждый экземпляр класса будет фактически больше, чем если бы он просто включал примитив напрямую, как это было бы в нестатическом случае)

3) Достаточно ли умны компиляторы чтобы определить, что в случаях, подобных приведенному выше, переменная равна ' эффективно статический », поскольку невозможно иметь разные экземпляры, содержащие разные значения и, следовательно, оптимизировать его так же, как конечный статический?

7
задан Kdeveloper 30 September 2010 в 22:40
поделиться