Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

bytecode ; 바이트코드

2010. 3. 23. 16:46카테고리 없음

728x90

bytecode ; 바이트코드

 

바이트코드는 자바 원시언어 문장을 포함하고 있는 파일을 컴파일하면 그 결과물로 얻게되는 것이다.

컴파일된 자바코드, 즉 바이트코드는 한번에 한 문장씩 컴퓨터 내에서 실행된다는 측면에서는 실행할 준비가 된 프로그램 모듈과 비슷하지만, 그러나 바이트코드 명령어들은 논리적이고 추상적 기계인 자바 가상머신에 보내는 실제 명령어들이다 (여기서 자바 가상머신이란 바이트코드 명령문과 실제 컴퓨터 프로세서 명령문들 간에 번역기처럼 동작하기 위해 각 컴퓨터 플랫폼에 공급된 소프트웨어를 의미한다).

바이트코드는 한번에 한 문장씩 번역되는 형식 외에, 어떤 특정한 시스템 플랫폼에 맞게 JIT 컴파일러에 의해 다시 컴파일될 수 있는데, 이렇게 하면 자바프로그램의 실행이 더 빨라진다.

바이트코드는 보통 ".CLASS"라는 확장자를 갖는 바이너리 파일 속에 담겨진다.

 

**

안녕하세요. 우선, 자바 소스 코드는 확장자가 .Java로 끝나는 일반 text 파일에 지나지 않습니다.위 코드를 실행시키기 위해선, 소스 코드를 컴파일을 통해서, 확장자가 .class인 byte code라고 부르는 파일이 만들어져야 합니다.

즉, 자바로 작성된 프로그램은 바이트 코드로 변환된후, Java Virtual Machine에 의해서 실행되어 집니다.

.class 파일이 .exe파일처럼 실행가능한 파일이란 뜻은 아니구요.class 파일을 실행시켜줄 (즉 interprete, 해석하여 실행시켜줄) 무언가가 필요한데요. 그것이 바로 Java Virtual Machine(JVM)이죠.


바이트코드는 .class 파일형태로, JVM에 의해서 실행되어지는 코드를 말한답니다.

 

**

"Architecture 중립적(다양한 운영체제를 수용하기 위해 자바 컴파일러는 바이트코드를 생성한다)"

일적인 프로그램언어는 컴파일하면 기계어가 생기죠. 기게어는 그 같은 종류의 컴퓨터(더 정확히 말하면같은 종류의 OS와 CPU) 에서만 작동합니다. 에를 들어 window에서 사용하는 MS-Excel은 유닉스 컴퓨텅에서 돌아가지 않고, HP컴퓨터(unix)에서 만든 C프로그램을 컴파일 해서Sun컴퓨터(unix)에서 돌리면 돌아가지 않지요.

그런데 자바는 컴파일 하면 바이트 코드가 생기는데, 이 바이트 코드는 java가상 머신이나 웹브라우져가 잇으면 돌아갑니다. 즉 다양한 운영체제를 수용하기 위해 Architecture 중립적이다는 말이죠.

다양한 운영체제를 수용하기 위해 Architecture 중립적이다가 뭐나고요?
다양한 운영체제를 수용한다는 다양한 운영체제에서 돌아간다는 의미고, Architecture 중립적이다는, 어떤 특정한 컴퓨터에도 치우치지 않고(특정 컴퓨텅에서만 돌아가지 않고) 모든 컴퓨텅에서 돌아가게 만들었다는 뜻입니다.

 

 

**

자바가 생성하는 바이트코드(bytecode)란 무엇인지...왜 필요한지..자바에서 어떠한 역할을 하는지??

 

프로그래밍에서 사용되는 컴파일러의 개념은
고급언어로 만들어진 소스를 CPU가 이해할 수 있는
기계어로 바꿔주는 것입니다.
물론, CPU 뿐만 아니라, 컴파일러가 지원하는
운영체제(OS)에서만 동작이 가능하구요...

따라서 Windows용 Starcraft를 Linux나 Solaris에서는
돌릴 수 없는 것이죠.


하지만, 자바는 컴파일한 코드를 어떠한 환경에서도 동작할 수 있도록
즉, Compile Once, Run Everywaere 를 목적으로 만들어졌기 때문에
기계어로 번역을 하면 실행의 문제가 발생합니다.
따라서 만든 개념이 Byte Code입니다.
Byte Code란 일종의 기계어 비슷한 코드입니다.
자바 가상 머신(Java Virtual Machine / JVM)이 설치되어 있는 운영체제나
웹브라우저만 있으면 이 Byte Code를 각 CPU와 운영체제에 맞도록
해석해서 실행할 수 있도록 하는 것이죠.

즉, 특정 아키텍처에 구애받지 않고 동작될 수 있도록 해주는
일종의 1차 컴파일된 파일이라는 개념입니다.

그리고, 이러한 특성을 자바의 아키텍처 중립성이라도 부릅니다.


728x90