본문 바로가기

JAVA관련 상식

JVM 과 바이트 코드

 

1. 자바 가상 머신 ( JVM : JAVA Virtual Machine )

- 시스템 메모리를 관리하면서 자바 실행 환경을 제공하며, 다른 프로그램을 실행 시키기 위한 목적으로 사용된다. 자바 가상 머신은 자바 프로그램이 어떠한 기기, 운영체제 상에서도 실행될 수 잇는 환경을 제공하고, 프로그램 메모리를 관리하고 최적화 한다.

- 자바 가상 머신의 특성
스택 기반의 가상 머신
단일 상속 형태의 객체 지향 프로그래밍을 가상 머신 수준에서 구현
포인터를 지원하되 C와 같이 주소 값을 임의로 조작이 가능한 포인터 연산이 불가능
가비지 컬렉션 사용
모든 기본 타입의 정의를 명확히 함으로써 플랫폼 독립성 보장
데이터 흐름 분석에 기반한 자바 바이트코드 검증기를 통해 스택의 넘침, 명령어 피연산자의 타입 규칙 위반, 필드 접근 규칙 위반, 지역 변수 초기화 전 사용 등 문제를 실행 전 검증하여 실행 시 안전을 보장하고 부담을 줄여준다.
명령어에서 스택에서 가져올 피연산자의 타입을 명령어에 지정한다. 

2. 바이트 코드 (Bytecode, portable code, p-code)
- 바이트 코드는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한  이진 표현법이다. 하드웨어가 아닌 소프트웨어에 의해 처리되기 때문에, 보통 기계어보다 더 추상적이다.
- 바이트코드는 대부분의 명령 집합이 0개 이상의 매개 변수를 갖는 1바이트 크기의 동작 코드였기 때문에 바이트코드라 불리게 되었다. 
- 바이트코드는 특정 하드웨어에 대한 의존성을 줄이고, 인터프리팅도 쉬운 결과물을 생성하고자 하는 프로그래밍 언어에 의해, 출력 코드의 한 형태로 사용된다. 
- 컴파일되어 만들어진 바이트코드는 특정 하드웨어의 기계 코드를 만드는 컴파일러의 입력으로 사용되거나, 가상 컴퓨터에서 바로 실행된다.

3. 자바 바이트 코드 (Java bytecode) 
- 자바 바이트코드는 자바 가상 머신이 실행하는 명령어의 형태이다. 
- 각각의 바이트코드는 1바이트로 구성되지만 몇 개의 파라미터가 사용되는 경우가 있어 총 몇 바이트로 구성되는 경우가 있다. 
- 256개의 명령코드 모두가 사용되지는 않는다.
- 자바 프로그래머가 자바 바이트코드를 꼭 인지하거나 이해할 필요는 없다. 하지만, 바이트코드를 이해하고 자바 컴파일러에 의해 바이트코드가 어떻게 생성될 것인지를 이해하는 것은 C, C++ 프로그래머가 어셈블리어를 이해하는 것과 같다고 볼 수 있다.

'JAVA관련 상식' 카테고리의 다른 글

CGI와 서블릿 그리고 톰캣  (0) 2020.05.13
J2SE, J2EE, JDK, JRE 차이  (0) 2020.05.13