질문이있어서 혼란 스럽습니다.은 자바 패스 바이 값입니까? 가비지 콜렉션 관련
가비지 콜렉션을 사용할 수있는 8 번째 코드를 실행 한 후?
public class X
{
public static void main(String [] args)
{
X x = new X();
X x2 = m1(x); /* Line 6 */
X x4 = new X();
x2 = x4; /* Line 8 */
doComplexStuff();
}
static X m1(X mx)
{
mx = new X();
return mx;
}
}
.x를
는 B .x를 및 X2
C는 .x를 4 배속 D는 .x4
은 내 초기 생각은 X2는 가비지
을 수집 하였다 왜냐하면 x2 = x4 일 때 8 행에서 해설되고 java는 값으로 전달되기 때문에 X2 = m1 (x)는 x에 영향을주지 않습니다.
나는 똑같은 질문 (그러나 다른 선택)을 여기에서 발견했다. https://www.indiabix.com/java-programming/garbage-collections/discussion-202 그리고 x는 또한 가비지 수집되어야한다고 말하면서, 내 생각과 모순된다. 지금 나는 어느 선택에 대해 혼란스러워한다. 질문은 정확합니다, 미리 감사드립니다.
귀하의 이해가 정확합니다. GC에 적합한 유일한 객체는'x2'에 의해 참조 된 객체입니다. – shmosel
[Java가 "pass-by-reference"또는 "pass-by-value"입니까?] (https://stackoverflow.com/questions/40480/is-java-pass-by-reference-orpass) -by-value) –
* 모두 *. 로컬 변수가 참조하는 것은 가비지 수집을 방지하기에 충분하지 않습니다. 'doComplexStuff()'를 실행하는 동안,이 객체들 중 아무 것도 사용되지 않으며 이후에 사용되지 않을 것이다. JVM이 실제로 JVM을 수집 할 수 있는지 여부는 기술적 인 세부 사항에 달려 있습니다. JIT/옵티마이 저가 이미 코드를 처리했는지 여부에 관계없이 이러한 기술적 세부 사항은 * 원칙적으로 * 변경되지 않습니다. 이러한 모든 오브젝트는 가비지 수집이 허용됩니다. – Holger