문제

웹 응용 프로그램과 두 개의 클래스 파일이 있습니다.

일등석입니다 myclass.class ABC.jar 파일 (Web-Inf/lib/abc.jar) 내부에 있고 2 등석은 다음과 같습니다. yourclass.class 내부 클래스 폴더 (Web-Inf/ Classe/ YourClass.class)입니다.

내 질문은 응용 프로그램이 시작될 때 어떤 수업이 먼저로드 될까요? 그리고 왜 ?

도움이 되었습니까?

해결책

내 경험상 당신은 수업이 JVM에 의해로드되는 순서를 예측할 수 없습니다.

일단 테스트 러너 (Kinda Maven 's Surefire)를 만들고 동일한 JVM 및 OS를 사용하면 다른 기계에서 실행될 때 클래스를 다른 순서로로드했습니다. 배운 교훈 :

클래스 로딩 순서에 따라 응용 프로그램을 구축해서는 안됩니다.

다른 팁

"필요한"의 일부 정의를 위해 클래스가 필요에 따라로드됩니다. 클래스가로드되는 경우 정확히 JRE 구현, JAVAC 구현, 정확히 어떤 스레드, 서버 코드 및 응용 프로그램 코드에 의존합니다. 이 분야에서 가정을하는 것은 나쁜 생각입니다. 특정 실행에 대해 어떤 일이 일어나는지보고 싶다면 사용할 수 있습니다. -verbose:class

태양 클래스 로더 문서 항상 웹 -INF/클래스 또는 Web-Inf/Lib를 말하지만 어느 것이 먼저 확인 될지는 말하지 않습니다.

에서 IBM 문서:

"로딩 클래스에 대한 규칙은 JVM 사양에서 자세히 설명되어 있습니다. 기본 원칙은 다음과 같습니다. 클래스는 필요할 때만로드됩니다 (또는 최소한 이런 방식으로로드되는 것처럼 보입니다. JVM은 실제 로딩에 약간의 유연성이 있지만 고정 된 클래스 초기화 시퀀스를 유지해야합니다). 로드되는 각 클래스에는 다른 클래스가 의존하는 다른 클래스가있을 수 있으므로 로딩 프로세스가 재귀 적입니다. "

따라서 대답은 다음과 같습니다. 먼저 응용 프로그램에서 어떤 클래스가 필요한지에 따라 다릅니다.

Duffymo가 지적했듯이, 이것은 다를 수 있습니다. 이 특정 앱의 시퀀스를 확인할 수있는 한 가지 방법은 클래스 생성자 및 웹 웹 앱 페이지로드 메소드에 텍스트를 작성하는 것입니다. "클래스 A의 인스턴스화 객체", "웹 페이지 MyPage를 열었습니다"등.

시퀀스를 알아 내면 시퀀스에 대한 코드를 댓글을 달아서 나중에 재사용하여 시퀀스에 영향을 미치는 변경을하지 않았 음을 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top