2010-09-06 4 views
8

두 개의 다른 명령 행을 통해 java를 호출하는 데는 두 개의 서로 다른 JVM 또는 동일한 JVM의 두 개의 개별 인스턴스가 필요합니다.JVM의 인스턴스

+3

답글이 모두 같은 것을 알고 계십니까? – Riduidel

+0

좀 더 구체적이어야합니다. 당신과 다른 JVM의 차이점은 무엇입니까? 당신이 요구하는 차이점은 무엇입니까? – splash

답변

21

JVM은 클래스 (코드)가로드되고 객체 (데이터)가 공유되는 메모리 공간 인 Java Virtual Machine입니다. JVM은 운영 체제 프로세스와 동일합니다.

명령 줄에 java...을 입력하면 자바의 기본 클래스와 .class 파일 또는 사용자가 지정한 .jar의 메모리를로드하는 독립 프로세스가 실행됩니다.

다른 java... 명령은 다른 프로세스를 자체 메모리와 함께로드하므로 클래스가 단독으로로드됩니다.

인스턴스 단어 혼동 : '같은 JVM의 두 인스턴스'라고 할 때. JVM의 인스턴스를로드 된 독립 JVM에 별도의 프로세스로 말하곤합니다. 당신이 말하는 경우 : 두 프로세스가 JVM 1.5를 실행하고 있습니다. 오케이, 같은 의미의 JVM입니다. 같은 버전이지만 프로세스가 다르고 인스턴스가 다르며 모든면에서 독립적입니다.

웹 응용 프로그램 혼동 : 웹 응용 프로그램 (예 :)은 웹 서버의 일부 URL에 참석하면서 인스턴스화 된 클래스 및 개체 모음입니다. Tomcat은 10 가지 응용 프로그램으로 시작할 수 있습니다. 각기 다른 요청을하는 10 가지 다른 클래스와 객체가 있지만 실제로는 동일한 메모리 공간 (OS 프로세스)을 공유합니다. 아무도 다른 객체에 대한 참조를 제공하지 않기 때문에 웹 응용 프로그램은 다른 웹 응용 프로그램의 객체를 만질 수 없습니다. (그리고 클래스는 어떤 식 으로든 숨겨져 있지만 클래스로드라고하는 또 다른 이야기입니다.

1

질문의 차이점은 무엇입니까? 두 가지 다른 JVM 인스턴스를 말할 것이다. :)

java 명령을 실행할 때마다 새로운 JVM 인스턴스가 호출됩니다. 실행중인 Java 응용 프로그램은 새로운 Java 스레드를 실행할 수 있습니다 (Tomcat이 웹 응용 프로그램에서하는 것처럼).

+0

둘 다 서로 다른 JVM을 의미합니까? – JavaUser

+0

다른 프로세스라는 의미에서 그렇습니다. – splash

+0

어떻게 느낄 수 있습니까? 이것을 실현하기위한 코드 나 개념이 있습니까? – JavaUser

1

두 개의 개별 JVM. 동일한 JVM (예 : 동일한 Tomcat 인스턴스가 제공하는 10 개의 웹 응용 프로그램)에서 많은 것을 실행할 수 있지만 Tomcat을 시작하는 Java 명령은 1 개뿐입니다.

+0

그러면 왜 두 개의 서로 다른 JVM을 사용합니까? – JavaUser

+0

2 개의 java 명령은 2 개의 JVM 인스턴스로 연결되기 때문에. 대신에 톰캣을 한 번 실행하고 10 개의 전쟁을 전개한다면 ... 실행중인 JVM의 인스턴스가 1 개뿐입니다 – bwawok

1

동일한 소스 경로에서 Sun의 java.exe를 JDK/JRE 버전 1.6에서 두 번 시작한 경우 두 개의 서로 다른 별개의 JVM 인스턴스가 생성됩니다. 응용 프로그램을 통해 구성하지 않으면 이들 사이에 공유가 없습니다. 두 개의 다른 JVM을 실행하려면 한 위치에서 java.exe (1.5라고 함)를 시작하고 다른 위치에서 java.exe (version 1.6)를 시작해야합니다.

관련 문제