본문 바로가기
Kopring (Kotiln + Spring)

Unsupported class file major version 64 에러와 jdk,jre

by 김뱅쓰 2023. 6. 16.

https://velog.io/@murphytklee/Unsupported-class-file-major-version-64-%EC%97%90%EB%9F%AC

 

Unsupported class file major version 64 에러

Unsupported class file major version 64

velog.io

 

intellij에서 스프링 부트 만들때 생성이 되어도 돌아가지 않는 에러가 발생하였다.

이유는 sdk와 java의 버전 차이 때문이었다. 

나는 java버전을 17로 해놓고 sdk를 20으로 되어있었다.

그래서 변경하니 제대로 빌드되고 실행되었다.

 

jdk 와 sdk에 대해 알아보자

 

jre 

java runtime enviroment 로 자바 런타임 환경이다.

런타임 환경이란 ?

소프트 웨어 프로그램을 실행하기 위해서는 실행할 환경이 필요하다.

런타임환경은 클래스 파일을 로드, 메모리 및 기타 시스템 리소스에 대한 액세스를 확보한다.

 

자바 런타임 환경은 컴퓨터 운영체제 위세서 실행되며, 자바를 위한 부가적인 서비스를 제공하는 소프트웨어 계층이다.

-> 자바 애플리케이션을 실행하기 위해 필요한 실행환경을 제공하는 소프트웨어 패키지

 

jre와 jvm의 상호작용

jvm은 라이브 자바 프로그램 실행을 담당하는 실행 소프트웨어 시스템이다.

jre는 자바 코드를 받아서 필요한 라이브러리와 결합한 다음 이코드를 실행할 jvm을 시작하는 온디스크 시스템이다.

온디스크 시스템 : 데이터를 저장해놓고 관리하는 시스템

 

jre의 구성요소

1. java 가상머신 (jvm)

 - 자바 바이트 코드를 실제 기기의 기계어로 변환하고 실행한다.

 - jvm은 class loader,runtime data area,excution engine으로 이루어져있어 

 

2. java 클래스 라이브러리

 - 다양한 클래스와 라이브러리를 제공한다. (다양한 기능들이 클래스로 구성되어있음)

 

3. java 실행 환경 설정

 - 자바 애플리케이션을 실행하기 위해 필요한 환경설정을 관리한다. 이 설정에는 클래스 경로, 시스템 속성, 환경변수 등이 포함되어 있음

 

 

jdk

java development kit 자바 개발 키드이다.

jdk는 jre에 추가로 개발 도구와 컴파일러 등을 포함하고 있어 개발자가 자바 애플리케이션을 작성, 테스트 및 디버깅할 수 있는 환경을 제공

 

jdk 구조

이 중 몇개만 알아보자

  • javac - 자바 컴파일러. 자바 소스 파일을 바이트코드로 변환해준다.
  • javadoc - 소스 코드 주석으로부터 자동으로 문서를 생성해주는 툴
  • jar - 서로 관련있는 클래스 라이브러리들과 리소스들을 하나의 JAR 파일로 묶어주는 툴. Jar 파일을 관리하는데도 사용된다.

 

sdk 

software development kit

특정한 소프트웨어 꾸러미, 소프트웨어 프레임워크, 하드웨어 플랫폼, 운영체제 등을 위한 응용프로그램 등을 만들 수 있게 해주는 개발 도구의 집합 

즉 자바의 sdk가 jdk인 것이다.

 

+jvm과 메모리

jvm 

자바 바이트코드를 실행할 수 있는 주체

  1. 클래스 로더(Class Loader):
    • 클래스 로더는 JVM이 필요한 클래스 파일을 로드하는 역할을 합니다. 클래스 로더는 필요한 클래스를 찾아서 JVM의 메모리 영역으로 로드하고 링크하여 실행 준비를 합니다.
  2. 메모리 영역(Memory Area):
    • JVM은 메모리를 여러 영역으로 나누어 관리합니다.
      • 메소드 영역(Method Area): 클래스의 구조, 상수, static 변수 등이 저장되는 공유 메모리 영역입니다.
      • 힙 영역(Heap Area): 동적으로 생성된 객체가 저장되는 메모리 영역입니다.
      • 스택 영역(Stack Area): 메소드 호출과 관련된 메모리 영역으로, 메소드 호출 시에 생성되는 지역 변수와 메소드 호출 스택 프레임이 저장됩니다.
      • PC 레지스터(PC Register): 현재 실행 중인 명령어의 주소를 저장하는 영역입니다.
      • 네이티브 메소드 스택(Native Method Stack): 자바 이외의 언어로 작성된 네이티브 코드를 실행하기 위한 스택 영역입니다.
  3. 실행 엔진(Execution Engine):
    • 실행 엔진은 JVM이 자바 바이트코드를 실제 기계어로 변환하여 실행하는 역할을 합니다. 실행 엔진은 인터프리터 방식과 JIT(Just-In-Time) 컴파일러 방식을 사용하여 코드를 실행합니다.
  4. 가비지 컬렉터(Garbage Collector):
    • 가비지 컬렉터는 더 이상 사용되지 않는 객체를 자동으로 인식하고 메모리에서 제거하는 역할을 합니다. 가비지 컬렉터는 힙 영역의 객체들을 주기적으로 검사하여 더 이상 참조되지 않는 객체를 탐지하고 메모리를 회수합니다.
  5. 네이티브 인터페이스(Native Interface):
    • 네이티브 인터페이스는 자바 프로그램이 네이티브 코드(다른 언어로 작성된 코드)와 상호 작용할 수 있는 인터페이스를 제공합니다. 네이티브 인터페이스를 사용하여 C, C++ 등의 다른 언어로 작성된 코드를 자바에서 호출하거나 반대로 자바 코드를 다른 언어에서 호출할 수 있습니다.

메모리(runtime data area)

  • JVM이 프로그램을 수행하기 위해서 OS로부터 할당받는 메모리 공간이다.
  • Method 영역 : 변수 이름, 데이터 타입, 접근 제어자 정보, 필드 정보, 메소드 이름, 리턴 타입, 파라미터, type 정보, static 변수등이 생성되는 영역이다.
  • Heap 영역 : new 키워드로 생성된 객체와 배열이 생성되는 영역이다.
  • JVM Stack 영역 : 지역 변수, 파라미터, 리턴 값, 연산에 사용되는 값 등이 생성되는 영역이다.
  • PC Register : 쓰레드 생성 시, 생성되는 영역이다. 현재 쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역이다. 쓰레드를 돌아가면서 수행할 수 있게 도와준다. 각 쓰레드마다 존재한다.
  • Native Method Stack : 자바 외 언어 코드를 위한 메모리 영역이다.

 

https://velog.io/@jkijki12/Java%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC

 

[Java] JDK, SDK, JRE, SE, EE, ME, jvm 그게 뭔데!!!!

java + @ 에 대해서 알아보자.

velog.io

 

 

자바가 실행되는 과정

내가 작성한 자바 파일을 jdk의 개발툴인 javac가 (.class)인 바이트코드로 변환한다.

먼저 바이트코드(.class)로 이루어진 코드를 로드해서 파일을 검색하고 메모리에 로드한다(class loader기능).

로드된 파일은 jvm의 메모리 영역에 있다.(runtime data area 메모리영역)

jvm은 실행엔진을 통하여 바이트를 기계어로 변환하고 실행한다.(excute engine)

실행중인 애플리케이션이 필요로하는 객체는 힙영역에 할당,메소드 호출과 관련된 데이터는 스택영역에 저장

jvm의 가비지 컬렉터를 사용하여 더 이상 참조되지 안흔 객체를 메모리에서 제거 (garbage collector)

애플리케이션이 종료되면 jvm도 종료된다.

 

'Kopring (Kotiln + Spring)' 카테고리의 다른 글

CORS란  (0) 2023.07.20