JVM(Java Virtual Machine)

공정위 광고 문구 Ver 3.1
공정위 광고 문구 Ver 3.2(모바일 전용)

JVM(Java Virtual Machine)이란 자바 프로그램이 실행되는 가상 머신입니다. 자바 언어는 특정한 OS(리눅스윈도우 등)에 종속되지 않고 여러 플랫폼에서 실행될 수 있도록 고안되었는데 이것을 가능하게 해주는 핵심적인 요소가 JVM입니다.

Java Virtual Machine은 자바 애플리케이션을 실행하기 위한 환경을 제공하며, 자바 소스 코드를 컴파일하여 바이트 코드로 변환하고 이를 실행합니다. 이렇게 변환된 바이트 코드는 JVM에서 실행되며, JVM은 해당 플랫폼에 맞게 이를 해석하고 실행합니다.

기본적으로 자바 가상 머신(JVM)은 다른 프로그램을 실행하는 것이 목적인 프로그램입니다.

바이트 코드란?

바이트코드(Bytecode, portable code, p-code)는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법이다. 하드웨어가 아닌 소프트웨어에 의해 처리되기 때문에, 보통 기계어보다 더 추상적이다.

역사적으로 바이트코드는 대부분의 명령 집합이 0개 이상의 매개 변수를 갖는 1바이트 크기의 명령 코드(opcode)였기 때문에 바이트코드라 불리게 되었다. 바이트코드는 특정 하드웨어에 대한 의존성을 줄이고, 인터프리팅도 쉬운 결과물을 생성하고자 하는 프로그래밍 언어에 의해, 출력 코드의 한 형태로 사용된다.

출처: 위키피디아 바이트코드
서버실 배경의 JVM 이미지

✅ JVM의 4가지 기본 기능

크게 2가지 기본 기능을 생각할 수 있습니다.

  • 바이트 코드 실행
  • 자바 컴파일러에 의해 생성된 바이트 코드(.class 파일)를 실행하는 역할을 합니다. 이러한 바이트 코드는 JVM에서 실행되며, JVM은 해당 플랫폼에 맞게 해석하고 실행합니다.
  • 메모리 관리
  • 메모리 할당 및 해제, 가비지 컬렉션(Garbage Collection)을 통한 메모리 관리를 담당합니다. 이를 통해 자바 프로그램에서 사용되는 메모리를 효율적으로 관리하고 최적화 할 수 있습니다.
  • 예외 처리
  • 자바 프로그램에서 발생하는 예외 상황을 처리하고 관리합니다. 이는 프로그램이 예기치 않은 상황에 대처할 수 있도록 도와줍니다.
  • 스레드 관리
  • 다중 스레드를 관리하고 스레드 스케줄링을 수행하여 자바 프로그램에서의 병렬 처리를 지원합니다.

✅ 가비지 컬렉션(Garbage collection)

가비지 컬렉션(Garbage Collection)은 프로그래밍 언어에서 동적으로 할당된 메모리 중에서 더 이상 사용되지 않는 메모리를 자동으로 식별하고 해제하는 프로세스를 말합니다. 주로 메모리 누수(memory leak)를 방지하고 프로그램의 메모리 관리를 지원하기 위해 사용됩니다.

프로그래밍 언어에서는 메모리를 할당하고 사용한 뒤 해제하는데, 때로는 사용하지 않는 메모리를 명시적으로 해제하지 않을 수 있습니다. 이 때 사용하지 않는 메모리 영역이 계속해서 쌓이면 메모리 누수가 발생할 수 있습니다. 가비지 컬렉션은 이러한 문제를 방지하기 위해 사용되며, 자동으로 더 이상 필요하지 않은 메모리를 확인하고 회수합니다.

자바의 JVM은 프로그램의 메모리 관리를 담당합니다. 프로그램 실행 중에 메모리 할당과 해제, 효율적인 자원 사용을 위한 가비지 컬렉션 등을 수행합니다. 프로그래머는 일반적으로 실행 중인 Java Virtual Machine과 상호 작용하여 메모리 사용량을 확인하고 Java Virtual Machine의 메모리 설정을 조정하여 성능을 최적화 합니다.

이전에는 C++과 같은 언어에서 프로그래머가 메모리 관리를 직접 처리해야 했지만, 자바에서는 Java Virtual Machine이 이를 대신합니다.Java Virtual Machine은 실행 중인 Java Virtual Machine 프로그램에서 사용되지 않는 메모리를 식별하고 가비지 컬렉션을 통해 해당 메모리를 자동으로 회수합니다.

초기에 자바는 성능 면에서 C++에 비해 떨어진다는 비판을 받았는데, 이는 가비지 컬렉션과 메모리 관리 때문이었습니다. 그러나 시간이 지나면서 가비지 컬렉션 알고리즘과 접근 방식이 계속 발전하여 성능이 향상되었습니다.

이러한 발전은 자바 뿐만 아니라 다른 현대 언어에서도 자동 메모리 관리를 통해 소프트웨어 개발을 훨씬 편리하게 만들었습니다. JavaScript나 Python과 같은 다른 언어에서도 자동 메모리 관리가 흔히 사용되고 있습니다.

Java, Desktop

ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.

Similar Posts

  • 리눅스 명령행 인자(Command-Line Argument)와 명령어 옵션

    ‘리눅스 명령행 인자(Command-Line Argument)‘는 ‘리눅스 명령어 인수‘, ‘명령 인자‘ 등으로도 불리며, 리눅스 커맨드 라인에서 명령어를 실행할 때 프로그램에 전달하는 매개변수를 뜻 합니다. 리눅스에서 “매개변수(Parameters)”는 일반적으로 프로그램이나 함수에 전달되는 값을 가리킵니다. 이 값은 해당 프로그램이나 함수가 실행될 때 필요한 입력 값으로 사용됩니다. 컴퓨터 프로그래밍에서 “매개변수(Parameters)”는 함수에 전달되는 값을 받아들이는 변수를 의미합니다. 이는 함수 정의에…

  • 오라클 데이터베이스(Oracle Database)

    오라클 데이터베이스 오라클 데이터베이스(Oracle Database 또는 Oracle RDBMS)는 미국 오라클(Oracle) 사의 관계형 데이터베이스 관리 시스템(relational database management system, RDBMS)입니다. Windows Server, Unix 및 다양한 GNU/Linux 배포판을 포함한 운영 체제의 다양한 하드웨어에서 실행될 수 있습니다. Oracle Database에는 다른 플랫폼의 애플리케이션이 Oracle Database와 원활하게 통신할 수 있도록 하는 네트워킹 스택이 있습니다. 예를 들어 Windows에서 실행되는 애플리케이션은 Unix에서…

  • SSH 명령어: 옵션 및 사용 방법

    리눅스에서 SSH(Secure Shell)는 네트워크를 통해 다른 시스템에 안전하게 접속할 수 있도록 해주는 프로토콜입니다. SSH는 원격 서버와 클라이언트 간의 통신을 암호화하여 보안성을 높이며, 주로 원격 접속, 파일 전송, 그리고 터널링 기능을 제공합니다. SSH 명령어를 사용하여 사용자는 원격 서버에 안전하게 접속한 뒤 다양한 작업을 수행할 수 있습니다. 터널링 기능: 한 네트워크에서 다른 네트워크로 데이터를 안전하게…

  • Syslog란 무엇인가? | rsyslog.conf 설정

    Syslog는 원래 Sendmail의 일부로 개발되었으며, 이후 로그 관리의 편리함이 인식되면서 독립적인 표준으로 발전하게 되었습니다. System Logging의 약자로, 로그를 기록하고 관리하는 표준 서비스 또는 프로토콜을 의미합니다. 메일 서버, FTP 서버 등 다양한 프로그램이 생성하는 메시지를 중앙에서 수집하여 로그 파일로 저장하고, 이를 분석할 수 있도록 지원합니다. 시스템을 효율적으로 모니터링하고, 잠재적인 문제를 신속하게 식별 및 해결하며,…

  • [Shell 특수문자] 리눅스 와일드카드(메타문자)

    리눅스 와일드카드는 Shell 특수문자로 메타 문자로 불리기도 합니다. Shell 특수 기호 중 와일드카드(글로빙으로 부르기도 함)는 문자 패턴에 따라 파일명을 선택할 수 있습니다. 특수 문자에는 인용(따옴표) 기호, 리눅스 다중 명령어, 리눅스 히스토리 기호, 리눅스 디렉토리 기호, 리눅스 괄호 기호 및 입출력 리다이렉션 등 다양하게 있습니다. ✅ 리눅스 와일드카드 매칭 문자 리눅스 와일드카드 매칭 문자…

  • 리눅스 셸 환경(Shell Environment) 정의 및 이해와 쉘 환경변수 | Shell 시작 파일 2가지

    셸 세션을 이용해서 서버와 상호 작용을 할 때 해당 동작과 리소스에 대한 연결을 결정하기 위해 컴파일 하는 많은 정보가 있습니다. 이러한 서정 중 일부는 구성 설정에 포함되어 있으며, 다른 설정은 사용자 입력에 의해 결정됩니다. 리눅스 셸 환경은 셸의 구성 설정과 사용자 입력에 의해 결정된 설정을 유지관리 영역을 이용해 관리하는 가장 일반적인 방법을 이용하게…

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Prove your humanity: 0   +   3   =