그래서 스윙 프로그램에서 누출되는 엄청난 메모리와 CPU를 경험하고 EDT에서 필요한 모든 것을 절대 실행하지 않고 모든 것을 메서드에 전달할 정도로 어리 석다는 것을 깨달았습니다. 결과적으로 "pass-by-value"규칙 때문에 객체와 2000 배열을 복제한다는 것을 알게되었습니다.setter로 참조로 전달
내 질문은, 다음과 같은 코드 :
public class Test {
Object obj = new Object();
public void setOBJ(Object obj) {
this.obj = obj;
}
}
그것이
obj
의 새로운 인스턴스 또는
obj
에 대한 참조로
this.obj
를 설정합니까?
더욱이 건마다 또는 이와 비슷한 경우가 발생할 수 있습니까? 나는 이것을 시도 할 것이지만 어디서부터 시작될 수 있는지 그리고 어떤 경우에 일어날 지 모른다.
마지막으로, 멀티 스레딩에서, 어떤 것이 바뀌거나 여전히 같은 방식으로 전달 될 것인가? 솔직히 호기심이 많습니다.
"'this.obj'를'obj'의 새로운 인스턴스 또는'obj'에 대한 참조로 설정합니까?" -> 복제본이 아닌 객체에 대한 참조를 반환합니다. "게다가, 모든 경우에이 작업을 수행합니까?"-> 예, 항상 참조를 전달합니다. "내부적으로, 멀티 스레딩에서 무엇이 변경 되나요? 아니면 여전히 같은 방식으로 진행될 것입니까?" -> 예, 다중 스레드 환경에서도 참조가 메소드에 전달됩니다. – Turing85
[이 링크] (https://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value) TL; DR : 참고 문헌 만 복사하십시오. 이 객체는 복제하지 않습니다. 프로그램이 다른 이유로 느립니다. –
@ Turing85 대단히 감사합니다! – finnrayment