stack based 와 register based 의 차이
JVM 과 DVM 의 차이중의 하나가 stack-based VM 과 register-based VM 이란 차이가 있다고 한다. 그래서 stack-based 와 register-based 의 차이가 무엇인지 살펴보자.
먼저 요약을 하자면, operand(연산할 때 쓰이는 값) 을 register 에 넣고 연산을 하느냐, 아니면 stack 에 넣고 연산을 하느냐의 차이라고 보면 될 듯 하다.
register-based
add 에 대한 x86의 assebler syntax 이다.[ref. 1]이렇게 register 에 operand(연산할 값) 를 넣고 instruction 을 수행하는 것이 register-based 라고 할 수 있다.
add eax, 10 — EAX ← EAX + 10
- add <reg>,<reg>
- add <reg>,<mem>
- add <mem>,<reg>
- add <reg>,<con>
- add <mem>,<con>
stack-based
그런데 jvm 은 stack-based 이다. stack 에 operand 를 넣고 계산하는 방식인 것이다. 아래 코드와 그림을 보면 쉽게 이해할 수 있을 것이다.
iload_0 // push the int in local variable 0
iload_1 // push the int in local variable 1
iadd // pop two ints, add them, push result
istore_2 // pop int, store into local variable 2
예시출처: ref. 2
iload_1 // push the int in local variable 1
iadd // pop two ints, add them, push result
istore_2 // pop int, store into local variable 2
예시출처: ref. 2
from : http://www.artima.com/insidejvm/ed2/jvm8.html |
좀 더 자세한 설명을 보고 싶다면 ref. 2 가 도움을 줄 것이다.
댓글 없음:
댓글 쓰기