Этот вопрос является продолжением этого, но требует более конкретного сценария.
Допустим, у нас есть следующий класс:
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;
}
}
Если бы я смотрел на этот класс, я мог бы сразу сказать, что левая и правая переменные никогда не могут быть установлены в нулевое значение раньше. Это означает, что сборщику мусора потребуется собрать левый и правый объекты (и уменьшить количество ссылок на них) для этого класса только тогда, когда ссылки на родительский класс Person достигнут нуля. Это также должно означать, что он может собирать людей одновременно с объектами левой и правой стопы; также приводит к меньшему количеству пробегов и ускорению.
Следовательно, в этом примере означает ли маркировка закрытых переменных-членов final, что код приведет даже к незначительному ускорению сборки мусора (или, возможно, это может быть использовано в качестве точки ускорения)?