2016-09-18 1 views
0

Java 클래스가로드되면이 클래스에서 참조 된 클래스 (인스턴스화되지 않은 클래스)도로드됩니까? 참조 된 클래스가 인스턴스화되거나 정적 필드에 값이 할당 될 때까지로드되지 않습니다. 그러나,이 동작은 JVM이 JVM에 따라 다르다는 것을 알게되었습니다. 사실입니까?Java 클래스가로드되면이 클래스에서 참조 된 클래스 (인스턴스화되지 않은 클래스)도로드됩니까?

+0

클래스 로딩의 심오한 부분을 배우려면 Java 언어 사양 및 JVM 사양을 읽으십시오. StackOverflow에 대한 질문은 너무 광범위하고 이미 다른 곳에서도 문서화되어 있습니다. –

답변

0

클래스를로드하는 데 두 가지 오버로드 된 메서드가 있습니다.

loadClass(name, resolve); 
loadClass(name); 

해결 방법은 부울 플래그이며 true 일 때 참조 된 모든 클래스도 해결합니다. 거짓 일 때 참조 클래스를로드하지 않습니다.

로드 할 클래스에 대해 resolve 변수는 항상 true입니다. 시스템이 loadClass()를 재귀 적으로 호출 할 때만이 변수를 요청할 클래스가 이미 확인되었음을 알기 때문에이 변수를 false로 설정할 수 있습니다.

Here, loadClass(name); calls loadClass(name, false); 
0

클래스는 을 사용할 때만로드됩니다.

ClassLoader에서 수행중인 작업을 인쇄함으로써 자신의 실험을 "증명"하는 것은 매우 쉽습니다. 그 방법에 대해서는 here을 참조하십시오.

l 이것은 으로 지정되어 있으며, JVM의 속성입니다. 의미 : 모든 JVM은 그렇게해야합니다 (자세한 내용은 here 참조).

그리고 알았습니다. 다른 것은 말이되지 않을 것입니다. 일부 클래스 은 10, 20 개의 다른 클래스를 참조 할 수 있습니다. 이로드 될 때 모든 수업을 정말로로드 하시겠습니까? 그리고 A의 해당 참조가 참조하는 10, 20 개의 클래스 모두?! 당신이 그들을 필요로하는지 알지 못하면서?!

관련 문제