본문 바로가기

웹 프로그래밍/Java

JVM? 가상기계, 버츄얼 머신, 가상 머신, 가상 컴퓨터이다

 

Write Once, Run Everywhere

 

자바에서는 컴파일된 실행 코드가 플랫폼 독립적이다.

 

자바 컴파일러는 자바 언어로 작성된 프로그램을 '바이트 코드(byte code)'라는 특수한 이진 파일로 변환한다.

이 바이트 코드를 실행하기 위해서는 자바 가상 시계(JVM:Java Virtual Machine)이 필요하다.

이 특수한 가상 컴퓨터 S/W가 바이트 코드를 한 줄씩 읽어서 해석한 후에 실행한다. 따라서 자바로 개발된 프로그램은 CPU나 OS 상관없이 JVM만 설치한다면 어느 시스템에서나 실행할 수 있다. 이 특징으로 자바는 인터넷 시대에 가장 잘 맞는 언어로 각광받고 있다. 인터넷은 다양한 종류의 컴퓨터가 연결된 네트워크이기 때문이다.

 

 

프로그램을 완성하고 나면 하드웨어나 OS 상관없이 동일한 모습으로 실행할 수 있다는 것이 자바의 가장 큰 장점이라고 생각한다.

이것을 잘 설명하는 문장이 "한번만 작성하고 어디서나 실행하세요(Write Once, Run Everywhere)."라는 자바의 슬로건이다.

 

 

JVM

 

자바는 어떤 방법으로 다양한 종류의 컴퓨터에서 변경없이 실행될까? 다른 프로그래밍 언어의 경우, 소스 코드가 컴파일러에 의하여 특정한 컴퓨터의 기계어로 변환돼서 특정 컴퓨터에서 실행된다. 그러나 자바 컴파일러는 특정한 컴퓨터를 위한 코드를 바로 생성하지 않는다. 대신에 가상적인 컴퓨터의 기계어인 바이트 코드(byte code)를 생성한다. 이 바이트 코드는 자바 가상 기계(Java virture machine)라고 하는 소프트웨어에 의해서 한 줄씩 해석되면서 특정한 컴퓨터에서 실행된다.

 

"가상 기계"는 가상의 컴퓨터를 의미하는 것으로 실제 컴퓨터에 소프트웨어를 씌워서 가상의 컴퓨터로 만드는 것이다.

 

반면에 실제 기계의 명령어로만 구성된 네이티브 코드(native code)보다 속도는 느리다. 그러나 최근에는 컴파일러와 가상 기계 기술의 진보로 인하여 자바 코드의 속도가 네이티브 코드에 근접하는 정도로 빨라졌다고 한다.

 

 

Byte Code

 

바이트 코드는 가상 기계의 기계어라고 생각할 수 있다. 그렇다면 과연 바이트 코드가 어떤 모습인지 궁금하다.

다음과 같은 자바 프로그램을 컴파일한다고 하자.

 

 

public class Hello {
public static void main(String[] args) {
System.out.println("Hello");
}
}

 

 

생성된 클래스 파일을 다시 디어셈블하면 다음과 같은 바이트 코드가 생성된다.

C > javap - c Hello > Hello.m과 같은 명령어를 사용하면 된다.

 

 

Compiled from "Hello.java"
public class Hello extends java.lang.Object {
public Hello();
Code:
0:	aload_0
1:	invokespecial		#1; /Method java/lang/Object."&ltinit&gt":()V
4:	return

public static void main(java.lang.String[]);
Code:
0:	getstatic		#2; //Field java/lang/System.out:Ljava/io
3:	ldc		#3; //String Hello World!
5:	invokevirtual		#4; //Method java/io
	/PrintStream.println:(Ljava/lang/String;)V
8:	return
}

 

 

참고

 

 

Java Virtual Machine - 나무위키

최근 수정 시각: 2019-04-07 05:45:52 1. 개요2. 종류3. 구조4. 성능4.1. 가비지 컬렉션 (GC)5. JVM 기반 언어5.1. 기존 언어의 JVM 구현5.2. JVM 기반의 언어6. 관련 문서Java로 개발한 프로그램을 컴파일하여 만들어지는 바이트코드를 실행시키기 위한 가상머신. JRE(Java Runtime Environment)에 포함되어 있으며, Java 컴파일러가 프론트엔드를 담당한다면 Java 가상 머신은 코드 최적화와 백

namu.wiki

 

 

Java Garbage Collection Basics

Java Overview Java is a programming language and computing platform first released by Sun Microsystems in 1995. It is the underlying technology that powers Java programs including utilities, games, and business applications. Java runs on more than 850 mill

www.oracle.com

 

 

JAVA Heap 메모리 모델

SUN JVM의 Heap은 Old Generation(Tunured space라고도 불림)과 Young Generation으로 구성되어 있다. Young Generation은 다시 Eden과 두개의 Survivor Space(From Space, To Space)로 나누어 볼 수 있다. Heap..

lyb1495.tistory.com

 

'웹 프로그래밍 > Java' 카테고리의 다른 글

자바의 특징 9가지 정리노트  (0) 2019.02.14