2014-11-07 3 views
15

jar은 컴파일 된 Java 클래스 및 conf 파일의 컨테이너 역할을하는 압축 된 아카이브 파일 형식입니다. 내가 아는 한, 압축 된 컨테이너 파일에서 내용을 읽으려면 먼저 어딘가에서 추출해야합니다.jar 파일은 어떻게 실행됩니까? 수업이 어딘가에서 추출 되나요?

그래서 JVM은 항아리 내부에서 클래스를 어떻게 실행합니까? 항아리의 내용을 임시 위치에 추출한 다음 클래스를 실행합니까?

+0

관련 : http://stackoverflow.com/questions/13927217/what-happens-when-java-program-starts –

+0

패키지 된 데이터는 메모리에 저장되고 디스크에 임시 저장되지 않습니다. –

답변

18

JVM은 jar을 임시 파일로 추출하지 않고 jar 파일에서 클래스 또는 파일을로드 할 수 있습니다.

이 기능은 표준 라이브러리에서도 사용할 수 있습니다. 자세한 내용은 JarFile을 참조하십시오.

아니요, JVM은 임시 파일에 jar 파일을 추출하지 않으므로 클래스 (및 리소스)는 필요할 때만로드됩니다.

jar 파일은 기본적으로 미리 정의 된 항목이 "META-INF/MANIFEST.MF" 인 zip 파일입니다 (이것은 실행 가능한 jar의 경우에만 필수입니다). 이 MANIFEST.MF 항목 (파일)에는 JVM에서 읽는 정보가 들어 있습니다. 매니페스트 파일에 대한 자세한 :

매니페스트 파일도 public static void main(String[]) 방법 응용 프로그램을 시작하기 위해 호출 할 수있는 메인로드해야 클래스를 포함하는 실행 항아리의 경우

Working with Manifest Files: The Basics

. Main-Class 매니페스트 항목은 메인 클래스를 지정

Main-Class: classname 
1

없음 JVM은 메모리가 아닌 파일에 jar 파일을 추출합니다. 메인 클래스에 대한 항목이있는 META-INF 내부의 MANIFEST.MF를 읽습니다. Jvm은이 메인 클래스 내에서 public static void main 클래스를 찾습니다. 이것은 jvm이 메인 클래스를 찾고 실행 가능한 jar 파일을 실행하는 방법입니다.

+2

정확하지 않습니다. JAR 내용 *은 추가되지만 파일이 아닌 메모리에 저장됩니다. JVM은 ZIP으로 압축 된 바이트 코드를 직접 실행할 수 없습니다. – DevSolar