Java & JVM

박제영·2024년 7월 18일
0

Java

Java는 1995년 Sun Microsystems(현재 Oracle Corporation의 일부)에서 개발한 객체 지향 프로그래밍 언어입니다. Java는 플랫폼 독립성을 제공하며, "한 번 작성하면 어디서나 실행된다"(Write Once, Run Anywhere, WORA)는 철학을 따릅니다. 이 철학은 Java 프로그램이 특정 플랫폼에 종속되지 않고 JVM이 설치된 모든 환경에서 실행될 수 있음을 의미합니다.

Java의 주요 특징은 다음과 같습니다:

  1. 플랫폼 독립성 : 자바 코드가 컴파일되면 바이트코드(bytecode)라는 중간 형태로 변환됩니다. 이 바이트코드는 JVM이 설치된 모든 환경에서 실행될 수 있습니다.
  2. 객체 지향 프로그래밍(OOP) : Java는 객체 지향 프로그래밍 패러다임을 따르며, 클래스와 객체를 사용하여 프로그램을 구성합니다.
  3. 메모리 관리 : Java는 자동 메모리 관리를 위해 가비지 컬렉션(Garbage Collection)을 사용합니다. 개발자는 메모리 할당과 해제를 직접 관리할 필요가 없습니다.
  4. 안전성 : Java는 강력한 예외 처리 메커니즘과 보안 모델을 제공하여 안정적이고 안전한 애플리케이션을 개발할 수 있게 합니다.
  5. 표준 라이브러리 : Java는 광범위한 표준 라이브러리(Java Standard Library)를 제공하여, 파일 입출력, 네트워킹, 데이터베이스 연결, GUI 개발 등 다양한 기능을 쉽게 구현할 수 있습니다.

JVM (Java Virtual Machine)

JVM은 Java 프로그램을 실행하기 위한 가상 머신입니다. Java 프로그램은 먼저 바이트코드로 컴파일되며, 이 바이트코드는 JVM에서 실행됩니다. JVM은 Java 프로그램의 실행을 담당하며, 플랫폼 독립성을 제공합니다.

JVM의 주요 구성 요소는 다음과 같습니다:

  1. 클래스 로더(Class Loader) : JVM의 클래스 로더는 Java 바이트코드를 메모리에 로드하는 역할을 합니다. 이는 Java 애플리케이션이 실행될 때 필요한 클래스를 동적으로 로드합니다.
  2. 바이트코드 인터프리터(Bytecode Interpreter) : 바이트코드를 하나씩 읽고 해석하여 실행합니다.
  3. JIT 컴파일러(Just-In-Time Compiler) : 바이트코드를 네이티브 기계어 코드로 변환하여 실행 속도를 높입니다. JIT 컴파일러는 실행 중에 자주 사용되는 바이트코드를 기계어로 변환하여 캐싱합니다.
  4. 가비지 컬렉터(Garbage Collector) : JVM은 자동 메모리 관리 시스템을 갖추고 있으며, 가비지 컬렉터는 더 이상 사용되지 않는 객체를 자동으로 메모리에서 해제합니다.
  5. 런타임 데이터 영역(Runtime Data Areas) : JVM은 프로그램 실행 중에 다양한 메모리 영역을 사용합니다. 여기에는 메서드 영역(Method Area), 힙(Heap), 스택(Stack), 프로그램 카운터 레지스터(Program Counter Register) 등이 포함됩니다.

Java 프로그램 실행 과정

  1. 작성 : 개발자는 Java 소스 파일(.java)을 작성합니다.
  2. 컴파일 : Java 컴파일러(javac)가 소스 파일을 바이트코드(.class)로 컴파일합니다.
  3. 실행 : JVM이 바이트코드를 로드하고 실행합니다. 클래스 로더가 바이트코드를 메모리에 로드하고, 바이트코드 인터프리터와 JIT 컴파일러가 바이트코드를 실행합니다.

요약

  • Java : 플랫폼 독립적이고 객체 지향적인 프로그래밍 언어.
  • JVM : Java 바이트코드를 실행하기 위한 가상 머신으로, 플랫폼 독립성을 제공하고 자동 메모리 관리 기능을 포함합니다.

이러한 구조 덕분에 Java는 다양한 플랫폼에서 안정적으로 실행될 수 있으며, 개발자는 동일한 코드를 여러 환경에서 재사용할 수 있습니다.

참고 이미지


profile
안녕하세요.

0개의 댓글