jar
은 컴파일 된 Java 클래스 및 conf 파일의 컨테이너 역할을하는 압축 된 아카이브 파일 형식입니다. 내가 아는 한, 압축 된 컨테이너 파일에서 내용을 읽으려면 먼저 어딘가에서 추출해야합니다.jar 파일은 어떻게 실행됩니까? 수업이 어딘가에서 추출 되나요?
그래서 JVM은 항아리 내부에서 클래스를 어떻게 실행합니까? 항아리의 내용을 임시 위치에 추출한 다음 클래스를 실행합니까?
jar
은 컴파일 된 Java 클래스 및 conf 파일의 컨테이너 역할을하는 압축 된 아카이브 파일 형식입니다. 내가 아는 한, 압축 된 컨테이너 파일에서 내용을 읽으려면 먼저 어딘가에서 추출해야합니다.jar 파일은 어떻게 실행됩니까? 수업이 어딘가에서 추출 되나요?
그래서 JVM은 항아리 내부에서 클래스를 어떻게 실행합니까? 항아리의 내용을 임시 위치에 추출한 다음 클래스를 실행합니까?
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
없음 JVM은 메모리가 아닌 파일에 jar 파일을 추출합니다. 메인 클래스에 대한 항목이있는 META-INF 내부의 MANIFEST.MF를 읽습니다. Jvm은이 메인 클래스 내에서 public static void main 클래스를 찾습니다. 이것은 jvm이 메인 클래스를 찾고 실행 가능한 jar 파일을 실행하는 방법입니다.
정확하지 않습니다. JAR 내용 *은 추가되지만 파일이 아닌 메모리에 저장됩니다. JVM은 ZIP으로 압축 된 바이트 코드를 직접 실행할 수 없습니다. – DevSolar
관련 : http://stackoverflow.com/questions/13927217/what-happens-when-java-program-starts –
패키지 된 데이터는 메모리에 저장되고 디스크에 임시 저장되지 않습니다. –