2013-05-13 4 views
1

제 질문은 실제로 두 부분으로 구성되어 있습니다. 첫 번째 질문은 java 클래스를 사용하여로드 된 클래스에서 메서드를 호출 할 때해야합니다. 이 "호출 된"메서드는 별도의 스레드에서 실행됩니까? 그렇다면 액세스 할 수 있습니까?호출 된 메소드의 가비지 수집 Java

둘째, invoke를 사용하여로드 된 클래스에서 메서드를 호출하는 경우를 생각해보십시오. 이 메소드가 System.exit()을 호출한다고 가정합니다. 보안 관리자를 사용하여 System.exit() 호출을 중지하고 상위 프로그램이 보안 관리자 예외를 포착하는 경우 하위 스레드가 제대로 가비지 수집됩니까?

답변

1

이 "호출 된"메서드는 별도의 스레드에서 실행됩니까?

아니요, Java Reflection은 일반적으로 멀티 스레딩과 관련이 없습니다.

하위 스레드가 제대로 가비지 수집됩니까?

멀티 스레딩이 필요하지 않으므로 두 번째 질문이 만족스럽지 않을 것으로 생각됩니다. 그러나 일반적으로 스레드간에 예외가 전파되지 않으므로 처리되지 않은 예외로 인해 자식 스레드가 종료되면 부모 스레드가 마술처럼 "catch"할 수 없습니다. 논리적으로 생각 해보자. 부모 스레드는 그 시점에서 완전히 무관 한 코드의 일부분이 될 것이고, 실행중인 것과 관련이없는 스택 추적으로 인터럽트를 중단하는 것은 의미가 없을 것이다.

+0

아, 알겠습니다. 감사합니다. 따라서 호출 된 메소드에서 수행 된 모든 메모리 할당은 예외 이후에도 계속 남아있을 것입니다. –

+0

메모리 할당은 아직 멀티 스레딩에 대한 별도 관심사입니다. 예외가 발생하면 개체가 도달 할 수 없게됩니다 (로컬 변수에서만 도달 할 수 있기 때문에). 개체 *는 GC됩니다. –