Этот вопрос является продолжением этого , но требует более конкретного сценария.
Допустим, у нас есть следующий класс:
public class Person {
private Foot left, right;
public Person(Foot left, Foot right) {
this.left = left;
this.right = right;
}
}
Мне было интересно, сможет ли следующий класс быть оптимизированным с точки зрения GC, если мы превратим его в следующее:
public class Person {
private final Foot left, right;
public Person(Foot left, Foot right) {
this.left = left;
this.right = right;
}
}
Если я смотрю на этот класс, я могу сразу сказать, что левая и правая переменные никогда не могут быть установлены в ноль рано. Это означает, что единственное время, когда GC должен будет собрать левый и правый объекты (и уменьшить количество ссылок на него) для этого класса, будет, когда ссылки на родительский класс Person достигнут нуля. Это также должно означать, что он может собирать человека одновременно с тем, как он собирает объекты левой и правой ступней; также приводит к меньшему количеству прогонов и ускорению.
Следовательно, в этом примере означает, что пометка окончательных переменных-членов final означает, что код приведет даже к незначительному ускорению при сборке мусора (или это может быть использовано в качестве точки ускорения)?