Home 자바 JVM(Java Virtual Machine), 가비지 콜렉션(Garbage Collection)
Post
Cancel

자바 JVM(Java Virtual Machine), 가비지 콜렉션(Garbage Collection)

##JVM? JVM은 ‘java virtual machine’을 줄인 것으로 직역하면 자바를 실행하기 위한 가상 머신이라고 할 수 있다

자바로 작성된 어플리케이션은 모두 이 JVM 위에서만 실행되므로, 자바 어플리케이션이 실행되기 위해서는 반드시 JVM이 필요하다

image

일반 애플리케이션의 코드는 OS만 거치고 하드웨어로 전달되는데 Java 어플리케이션은 JVM을 한번 더 거치기 때문에, 그리고 기계어로 컴파일되는 것이 아니고 실행 시 해석하는 상태이기 때문에 속도가 느리다는 단점을 가지고 있다

하지만 요즘엔 바이트코드를 하드웨어의 기계어로 변환해주는 JIT 컴파일러와 향상된 최적화 기술이 적용되어 속도의 격차를 많이 줄였다

image

일반 어플리케이션은 OS 위에서 바로 동작하므로 OS에 종속적이지만, JAVA 기반 어플리케이션은 JVM 위에서 동작하므로 독립적이다 하지만 반대로 JVM은 OS에 종속적이기 때문에 OS별 JVM을 따로 사용해야 한다

정리하자면

  1. Java 프로그램은 기계어가 아닌 바이트코드로 컴파일되며 JVM을 거치기 때문에 속도가 느리다는 단점을 가진다 (나중에 최적화)
  2. 자바 프로그램은 JVM을 거쳐 동작하므로 OS에 독립적이다 (JVM은 OS에 종속적)

JVM의 메모리구조

image

  1. 메서드 영역(Method Area): 클래스 파일(.class)의 정보를 저장하는 곳
  2. 힙 (heap): 인스턴스가 생성되는 곳
  3. 호출 스택 (Call Stack): 메서드 호출 시 필요한 메모리를 제공(지역 변수)

가비지 콜렉션

자바는 작성된 프로그램이 실행되면, 가비지 콜렉터(garbage collector)가 자동적으로 메모리를 관리해 주기 때문에 프로그래머는 메모리를 따로 관리를 하지 않아도 된다. 그렇다면 가비지 콜렉터는 어떤 방식으로 이를 처리할까?

Heap의 오브젝트 중에 Stack에서 도달 불가능한 것이 가비지 콜렉션의 대상이 된다

예를 들어 반복문 내부에서 생성된 인스턴스의 경우 매 반복마다 생성되고 다시 사용되지 않는 것들이 생긴다 이러한 객체들이 바로 가비지 콜렉션의 대상인 것이다

This post is licensed under CC BY 4.0 by the author.

데이터베이스 정규화(Normalization)

자바 쓰레드 로컬(ThreadLocal)