JVM(Java Virtual Machine)

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

  • 리눅스 백그라운드(Back Ground)&포그라운드(Fore Ground): 프로세스 제어하기

    리눅스의 프로세스는 백그라운드(Back Ground)와 포그라운드(Fore Ground) 두 가지의 모드로 작동됩니다. 리눅스 백그라운드 작업을 하는 이유는 일반적인 쉘 명령어를 실행했을 때 프로세스가 종료될 때까지 기다리면서 다른 작업을 하지 못하는 경우가 있기 때문입니다. 목차✅ JVM의 4가지 기본 기능✅ 가비지 컬렉션(Garbage collection)✅ 리눅스 포그라운드(Fore Ground)란? 터미널에 직접 연결되어 터미널과 입출력을 진행하는 프로세스를 뜻 합니다. 리눅스 단축키…

  • 리눅스 tmp 디렉토리: /tmp와 /var/tmp 차이

    리눅스 tmp 디렉토리는 임시 파일을 저장하기 위해 주로 /tmp와 /var/tmp 디렉토리를 사용합니다. /tmp는 일시적인 임시 파일을 저장하는 공간으로, 시스템이 재부팅 되면 대부분의 파일이 삭제됩니다. 따라서 빠른 입출력과 임시 작업에 적합하며, 주로 프로세스가 실행 중 생성하는 임시 데이터를 저장합니다. 반면에 /var/tmp는 재부팅 후에도 파일이 유지되는 임시 저장 공간입니다. 장기간 유지가 필요한 임시 파일이나 작업…

  • 로그 파일 삭제 쉘 스크립트 만들기(날짜 20xx, 용량)

    httpd.conf 파일에 access_log 및 error_log를 설정 했을 때 logrotate 설정이 아닌 경우 로그 파일 삭제 쉘 스크립트가 필요할 때가 있습니다. 목차✅ JVM의 4가지 기본 기능✅ 가비지 컬렉션(Garbage collection)✅ 로그 파일 삭제 쉘 스크립트 ✅ crontab 설정하기 크론탭 설정을 진행 해 줍니다. 리눅스 스크립트는 리눅스 운영 체제에서 해석하는 스크립트 언어로 작성된 명령 또는 명령 집합입니다….

  • 리눅스 커널(Kernel)이란? | 커널 버전

    리눅스 커널과 커널은 같은 뜻을 가지고 있습니다. 커널을 말할 때 리눅스 커널을 이야기 하는 것입니다. 핵심(&알맹이)이라는 뜻을 가진 커널(Kernel)은 내부 계층에 속하며, Shell 명령과 하드웨어를 연결해 주는 역할을 합니다. 목차✅ JVM의 4가지 기본 기능✅ 가비지 컬렉션(Garbage collection)리눅스 커널(Kernel)의 개념 컴퓨터는 크게 물리적으로 만질 수 있는 하드웨어(키보드, 모니터, 본체:CPU, 메모리 등)와 소프트웨어로 나뉘게 됩니다….

  • FTP 평가: vsftpd vs proftpd 차이점

    FTP는 파일을 광범위하게 전송하는데 사용되는 표준 프로토콜입니다. vsftpd 및 proftpd는 FTP 프로그램은 원격 서버에 저장된 파일을 엑세스하고 전송할 수 있도록 합니다. 서버를 사용하는 방법에 따라 ‘vsftpd vs proftpd’ 둘 중에 어떤 것이 더 적합할지 알아 보겠습니다. 목차✅ JVM의 4가지 기본 기능✅ 가비지 컬렉션(Garbage collection) Vsftpd 개요 Vsftpd(Very Secure FTP Daemon)는 빠른 파일 전송…

  • Nginx SSL 인증서 설치[CentOS 7]

    Nginx SSL 인증서 설치를 진행합니다. 목차✅ JVM의 4가지 기본 기능✅ 가비지 컬렉션(Garbage collection)1. 인증서 신청하기 SSL 인증서는 30일 무료 SSL을 https://zerossl.com/ 사이트에서 신청했습니다. DCV 인증은 DNS 인증 방식으로 진행했습니다. 네임서버에서 CNAME 레코드를 설정합니다. 설정 후 인증 신청을 한 후 대기 시간이 소요됩니다. 인증이 완료되면 인증서 파일을 다운로드 받은 후 서버에 인증서 설치 작업을…

답글 남기기

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

Prove your humanity: 1   +   6   =