Този въпрос е продължение на този, но изисква по-конкретен сценарий.
Да кажем, че имаме следния клас:
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 означава ли, че кодът ще доведе дори до незначително ускоряване на събирането на отпадъци (или може да се използва като точка за ускоряване)?