Рассмотрите класс Foo
.Свойства кэша в локальных переменных?
public class Foo {
private double size;
public double getSize() {
return this.size; // Always O(1)
}
}
Foo
имеет свойство размера, которое часто запрашиваемая, но никогда не модифицированную, с помощью данного метода. Я всегда кэшировал свойство в переменной всякий раз, когда к нему обращались несколько раз в любом методе, потому что «кто-то мне так сказал», не задумываясь. т.е.
public void test(Foo foo) {
double size = foo.getSize(); // Cache it or not?
// size will be referenced in several places later on.
}
Стоит ли это, или излишний?
Если я не кешу, современные компиляторы достаточно умны, чтобы кэшировать их сами?
Когда я это делаю, я делаю это для удобства чтения, а не производительность. – yshavit
зависит от сложности вашей реализации метода size(), например, в случае ArrayList или String это O (1), поэтому его не стоит кэшировать. –
Просто измените 'double size = foo.getSize(); 'to' double fooSize = foo.getSize(); '. –