So erlebt ich wirklich massiven Speicher und CPU-Leakage auf meinem Swing-Programm und erkannte, dass ich nicht absolut alles Notwendige auf dem EDT ausführte, aber dumm genug war, alles in Methoden zu übergeben Schließlich erkannte ich, dass ich Objekte und ihre 2000-Arrays aufgrund der "Pass-by-Value" -Regel vervielfältigte.Durch Referenz in einen Setter
Meine Frage ist, für den folgenden Code:
public class Test {
Object obj = new Object();
public void setOBJ(Object obj) {
this.obj = obj;
}
}
es this.obj
auf eine neue Instanz von obj
gesetzt Ist, oder der Verweis auf obj
?
Darüber hinaus tut es dies in alle Fall oder gibt es bestimmte Umstände, wo der eine oder andere passieren kann? Ich würde das versuchen, weiß aber nicht, wo ich anfangen soll und in welchen Fällen es passieren kann.
Schließlich ändert sich im Multithreading etwas, oder wird es immer noch auf die gleiche Weise passieren? Nur neugierig um ehrlich zu sein.
"Wird' this.obj' auf eine neue Instanz von 'obj' oder die Referenz auf' obj' gesetzt? " -> es gibt den Verweis auf das Objekt zurück, keinen Klon. "Außerdem, tut es das in jedem Fall" -> ja, du übergibst immer die Referenz. "Ändert sich beim Multithreading wirklich irgendetwas, oder wird es immer noch auf die gleiche Weise passieren?" -> Ja, auch in Multithread-Umgebungen werden Referenzen an Methoden übergeben. – Turing85
Werfen Sie einen Blick auf [diesen Link] (https://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value) TL; DR: Sie kopieren nur eine Referenz auf Dieses Objekt klont Sie nicht. Ihr Programm ist aus einem anderen Grund langsam. –
@ Turing85 Vielen Dank! – finnrayment