CPU가 JAVA를 인식하여 실행 할 수 있도록 하는 가상컴퓨터 이다.
JAVA의 원시 코느는 CPU가 인식하지 못하므로 기계어로 컴파일을 해줘야 한다.
이때 JAVA Compiler가 .java 파일을 .class로 변환한다.
public class Hello{
public static void main(String[] args){
System.out.println("Hello World");
}
}
javac hello.java
JAVA hello
Virtual Machine에서 돌아가는 프로그램을 위한 이진 표현 법이다.
자바 바이트코드는 JVM이 이해할 수 있는 언어로 변환된 코드다.
프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일러이다.
인터프리터의 단점을 완하기 위해 도입되었다.
컴파일된 코드는 캐시에 보관하기 때문에 빠르게 실행된다.
따라서 jvm은 내부적으로 해당 메서드가 얼마나 자주 수행되는지 체크하고
컴파일을 수행한다.
jdk : JDK안에는 개발 시 필요한 라이브러리들과 javac, javadoc 등의 개발 도구들을 포함되어 있고 개발을 하려면 당연히 실행도 시켜줘야 하기 때문에 JRE (Java Runtime Environment)도 함께 포함되어 있습니다.
jre : JRE는 자바 실행 환경(Java Runtime Environment)의 약자로 자바로 만들어진 프로그램을 실행시키는데 필요한 라이브러리들과 각종 API, 그리고 자바 가상 머신 (JVM)이 포함되어 있습니다. JRE는 자바로 "개발(쓰기)은 안되고 실행(읽기)만 된다"라고 생각해주시면 될 것 같습니다.
가비지 콜렉터(Garbage Collector)는 프로그래밍 언어에서 동적으로 할당된 메모리 중에서 더 이상 사용되지 않는 메모리를 자동으로 해제하는 기능을 말합니다. 이를 통해 개발자는 명시적으로 메모리를 해제하는 작업을 하지 않아도 되어 코드를 더 간결하게 작성할 수 있습니다.
가비지 콜렉터의 주요 역할은 다음과 같습니다:
사용되지 않는 메모리 탐지: 가비지 콜렉터는 프로그램 실행 중에 동적으로 할당된 메모리를 모니터링하고, 어떤 메모리가 더 이상 사용되지 않는지를 감지합니다.
해제되지 않은 메모리 해제: 사용되지 않는 메모리를 자동으로 해제하여 시스템의 자원을 효율적으로 활용합니다.
가비지 콜렉터는 주로 고급 프로그래밍 언어에서 사용되며, C#의 .NET Framework, Java, Python 등에서 내장되어 있습니다. 이러한 언어들은 메모리 관리를 대신 처리하므로 개발자는 명시적으로 메모리를 할당하고 해제할 필요가 없습니다.
가비지 콜렉터를 사용함으로써 메모리 누수(memory leak)와 같은 문제를 방지하고 프로그램의 안정성을 높일 수 있습니다. 그러나 가비지 콜렉션 과정이 실행될 때 일시적으로 성능 저하가 발생할 수 있으므로, 이를 고려하여 프로그램을 설계하는 것이 중요합니다.