Class 파일은 다음의 네 가지 특징을 가지게 됩니다.
- Compack 한 형태
Bytecode는 Source Code를 단순히 JVM의 언어로 번역해 놓은 것이기 때문에 Source Code와 비슷한 크기를 가지고 있습니다. Compiler를 통해 실행파일로 변경되는 과정에서 Library들을 포함하는 C++, Delphi와 같은 언어보다 작은 크기입니다. 이렇게 작은 크기를 유지할 수 있는 이유는 Class파일에는 실제로 참조하는 라이브러리를 포함하고 있지 않고, 단지 Symbolic Reference 만을 가지고 있기 때문입니다.
이 Symbolic Reference는 참조하는 객체의 특정 메모리 번지로 참조관계를 구성한 것이 아닌 참조하는 대상의 이름만을 지칭한 것입니다. Class 파일이 JVM에 올라가게 되면 Symbolic Reference는 그 이름에 맞는 객체의 주소를 찾아서 연결하는 작업 (Dynamic Linking)을 수행합니다. Java는 이 Dynamic Linking 덕분에 Class 파일은 Compact한 형태를 유지할 수 있는 것입니다.
- Bytecode 로의 변경
Class 파일은 Bytecode를 Binary 형태로 담아놓은 것이라고 정의할 수 있습니다. 그리고 Bytecoe는 JVM이 읽을 수 있는 언어를 의미합니다.
- Platform 독립적
Bytecode가 JVM을 위한 언어이기에 모든 Java Code가 Bytecode로 배포하는 것은 Platform의 제약에 없는 것입니다. JVM이 Bytecode를 읽을 수 있는 한, Bytecode는 동일하게 수행될 것이기 때문입니다. 이것을 다르게 표현하면 'Platform 독립적이다'라고 하는 것이고 더 나아가 'Run Everywhere'가 실현되는 것을 의미합니다.
- Network Byte Order 의 사용
Byte Order는 메모리의 주소 값을 할당하는 방식을 의미합니다. ZEON 이나 Itanium과 같은 Intel 계열의 CPU는 Little Endian 이라는 Byte Order를 사용하고 Unix 머신에서 주로 사용되는 SPARC, RISC 계열의 CPU는 Big Endian 방식을 사용합니다. 이 경우 두 CPU에 맞게 생성된 프로그램들은 서로 호환이 되지 않는 문제를 가지게 됩니다.
Network Byte Order는 서로 다른 계열의 CPU끼리 데이터를 전송 받을 때의 문제점을 해결하기 위해 정해진 일종의 약속입니다. 만약 Byte Order를 고려하지 않고 보낸다면 서로의 데이터는 주소가 반대로 되어 있어 제대로 전송되지 않을 것입니다. 그렇기 때문에 Network를 통해 데이터를 전송할 때는 통일된 방식을 따르기로 약속을 했는데 이것이 바로 Network Byte Order입니다. 이 Network Byte Order는 Big Endian을 사용하기로 약속이 되어 있습니다.
Class File Format은 Network Byte Order를 사용하기 때문에 Big Endian 방식을 사용하게 됩니다..
'Information Technology > Programming' 카테고리의 다른 글
The Java Virtual Machine(JVM) (0) | 2013.04.18 |
---|---|
The Java Application Interface (0) | 2013.04.18 |
The Java Language and JVM (0) | 2013.04.14 |
Java Basic Architecture (0) | 2013.04.11 |
Regular Expressions Debugger (0) | 2013.03.04 |