본문 바로가기

JVM

JVM은 Java Virtual Machine(자바 가상 기계)의 약자다. 이름은 기계지만 실제로는 소프트웨어다. 아마 JVM이 실질적인 CPU 역할을 하기 때문에 이런 명칭이 쓰였을 것이라 추정된다.


프로그램은 기본적으로 CPU 위에서 돌아간다. 따라서 C, C++의 경우 컴파일 결과 생성된 코드는 해당 CPU에서 바로 실행할 수 있다. 이런 코드를 네이티브 코드(native code)라 한다. 자바 소스코드(*.java)를 컴파일한 경우 생성되는 클래스 파일(*.class)은 CPU에서 직접 실행할 수 있는 코드가 아니다. 이 클래스 파일은 CPU 위에서 실행할 수 있게 하기 위한 중간 단계라고 할 수 있는 바이트 코드(byte code)로 이루어져 있다. 이 바이트 코드를 실행하기 위한 가상적인 CPU가 필요한데, 이 가상 CPU가 JVM이다.


이런 방식이 쓰이는 이유는 이식성 때문이다. 직접 native code를 생성하면 CPU에 종속적이지만, byte code를 생성하면 JVM에 종속적이므로 어떤 플랫폼이든 JVM만 있으면 실행할 수 있게 되는 것이다.


이처럼 JVM은 기본적으로 byte code를 실행하는 역할을 담당하는데, 그 역할을 위해 runtime linking과 garbage collection 기능을 지원한다.


runtime linking은 실행 클래스가 실행될 때 필요한 외부 class와 결합(linking)시키는 방식을 말한다. JVM에서 이 기능을 지원하기 때문에 여러 클래스로 구성되는 한 프로그램에서 한 클래스를 수정하면 전체를 다시 컴파일하는 것이 아니라 수정한 클래스만 재컴파일해도 된다는 장점을 갖는다.


garbage collection은 더이상 사용되지 않는 객체를 지우는 기능이다. 자바는 개발자가 직접 메모리에 접근할 수 없도록 설계되어 있고 메모리는 자바가 직접 관리한다. 객체 생성 시 자동적으로 메모리 영역을 찾아 할당하고, 사용이 완료되면 쓰레기 수집기(Garbage Collector)를 실행해 사용되지 않는 개체를 제거한다. 이는 프로그래머의 실수로 인한 ⒜메모리 누수 현상을 방지해 프로그래머의 부담을 덜어준다.










⒜메모리 누수(memory leaking): 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상.

                                           C 언어에서 동적 할당한 메모리를 free()로 해제하지 않아 발생하는 것이 

  대표적인 예다.











참고: https://javaiyagi.tistory.com/20



'Programming > Java' 카테고리의 다른 글

사용자 정의 예외  (0) 2019.07.07
예외 처리  (0) 2019.07.06
Managed code  (0) 2019.07.04
IO 입출력  (0) 2019.05.23
자바에서의 배열 선언 및 초기화  (0) 2019.05.08