SimpleJVM #2. Operand stack.

|
JVM은 Java로 작성된 소스코드(Source codes)가 자바 컴파일러(Java Compiler)에 의해 생성된 바이트 코드(Bytecode)를 읽어 OS에서 작동을 시키는 것이다. 소스 파일은 ClassName.java라는 파일에 기록이 되고 컴파일을 통해서 ClassName.class파일을 얻게 되는데 JVM이 하는 일은 이 ClassName.class파일에 있는 바이트코드를 실행하는 일이다. 각 플랫폼에 맞는 JVM이 있다면 자바 언어를 이용해 작성된 코드는 JVM이 지원되는 모든 하드웨어에서 같은 결과를 얻어내는 것이며, 이러한 개념은 write once, run everywhere라는 말로 대변이 된다.

이 바이트 코드를 실행하는 개략적인 메커니즘(Mechanism)은 바이트 코드를 읽어서(한번에 한 바이트씩 읽어들인다) 코드를 판별한 뒤 JVM에 할당된 리소스(Resources)를 이용하여 처리한다.

## Operand stacks and Arrays for local variables. ##
JVM의 특징 중 하나는 Stack을 이용한다는 점이다. 바이트 코드내에서 한 바이트씩 읽혀진 것이 피연산자(Operand)이며 이 것을 연산하기위해 스택을 이용한다. 그 스택을 이르는 말이 Operand Stack이다.
이 오퍼랜드 스택의 구조는 pop과 push연산에 의해 선입후출(FILO)의 형태를 보이는 데이터 저장 구조 즉, 스택이다.

OperandStack 구현
OpndClass의 기본 골격은 다음과 같이 정의 할 수 있을 것이다.
class OpndClass {
OpndClass(int capacity) { ... }

int pop() { ... }

void push(int value) { ... }
/* 스택 작동 확인을 위한 함수 구현, 스택에서 2개의 값을 pop하여 더한 후 push */
void add() { ... }
}

OpndClass.java

다음의 명령어들은 스택만을 이용한 연산들이다.
iconst_<n>
iconst_m1, iconst_0, iconst_1, iconst_2, iconst_3, iconst_4, iconst_5
sipush, bipush
idiv, imul, iadd, isub

각각의 상세 설명은 다음의 링크에서 확인 해 볼 수 있으며 이 포스트에서는 iadd의 설명서(Instruction)를 보면서 자바에서 제공하고 있는 Instruction set을 읽는 법을 조금만 알아본다.


다음 글에서는 지역변수배열에 대해서 알아볼까 한다.

'iProgramming > iJava' 카테고리의 다른 글

SimpleJVM #2. Operand stack.  (0) 2009.09.08
클래스를 새로 정의하면  (0) 2009.08.26
Nude Java #1. 개요  (0) 2009.08.04
Trackback 0 And Comment 0