2010-04-22 5 views
0

Java (Java Runtime Environment)에 속한 모든 부트 (코어) Java 클래스가 Java 용으로로드/초기화되었는지 확인하는 방법이 있습니까?Java : hasJREfinishedInitialization() - jre에서 모든 핵심 클래스로드/초기화가 완료되었는지 확인하는 방법?

JRE에 액세스 할 수 있지만 실제 응용 프로그램에는 액세스 할 수없는 아주 드문 상황에서이를 확인해야합니다. 따라서 주 응용 프로그램이 실행되고 그 시점부터 실행될 때까지 기다릴 수 없습니다.

+0

당신은 jkernel에 대해 이야기하고 있습니까? –

+0

Jkernel에 대해 처음 알게되었으므로 두렵지 않습니다.) – Tom

답변

1

JVM은 "필요에 따라"기반으로 클래스를로드하므로 부트 스트랩 클래스 경로의 "all"클래스가로드 될 지점이 없습니다.

말하자면 1.5 이전부터 Sun JVM은 "class data sharing"을 사용하여 특정 클래스 집합을 미리로드합니다. 어떤 클래스가로드되는지는 알 수 없지만 java.lang 패키지의 클래스에 국한되어 있다고 생각됩니다.

클래스가로드되는 것을 계속 추적하려면 JVM을 시작할 때 -verbose:class 명령 줄 옵션을 사용하십시오.

+0

파일 목록은'lib \ classlist'에 있습니다. –

+0

이것은 부분적으로 사실입니다. 예를 들어 Object 클래스의 생성자에서 새 FileWriter를 호출하면 아직 Object 클래스가 없으므로 FileWriter 클래스를 인스턴스화 할 수 없기 때문에 충돌이 발생합니다. 나는 비교할만한 상황에 처해 있으므로, 이것은 나를 위해 일하지 않을 것입니다. 불행히도 JVM을 시작할 수있는 권한이 없으며 명령 줄도 없습니다. – Tom

+0

@ 톰 - 질문을 수정하고 자신이하려는 것을 더 잘 설명해야한다고 생각합니다. Object 클래스는 실제로 생성자가 호출되기 전에로드되고 초기화되기 때문에 Object 및 FileWriter를 사용한 예제는 이해가되지 않습니다. 아마도 * static initializer *가 하위 클래스를 참조하는 상황이 있습니까? 그게 클래스 * 초기화 *에서 원형 종속성을 얻을 수있는 유일한 경우라고 생각합니다. (그리고 제대로 설계되지 않은 싱글 톤으로 인해 많은 일이 발생했습니다.) – Anon

0

귀하의 의견을 읽고 (실수로 내 쿠키를 삭제했습니다.) 제가 말할 수있는 것은 JVMTI은 당신이하려고하는 것이 무엇이든간에 훨씬 더 나은 선택이 될 수 있다는 것입니다.

그러나 JRE 클래스를 수정하는 것이 어려울 경우 FileWriter 초기화 중에 설정되는 정적 부울 변수를 추가하지 않는 이유는 무엇입니까?

+0

FileWriter는 단지 예일 뿐이므로 모든 클래스에서 그런 부울을 설정할 수는 없습니다. 다른 제안? – Tom

+0

@Tom - 당신이 성취하고자하는 것을 정확히 묘사한다면 아마도 누군가가 당신에게 더 나은 선택권을 줄 수있을 것입니다. 그리고 아마도 내장 된 JRE 클래스를 수정하는 것을 포함하지 않을 것입니다. – Anon

+0

응용 프로그램의 소스에 액세스하지 않고 응용 프로그램에 새로운 논리를 추가 할 필요없이 특정 JRE를 사용하는 모든 응용 프로그램의 모든 클래스, 인스턴스, 메소드 및 변수에 액세스하기 만하면됩니다. 당신이 궁금해하는 경우에 대비하여 이것은 개인적인 비 배포 용도로만 사용됩니다. – Tom

관련 문제