문제
- 예외처리(상태코드 반환)의 예제 코드를 보고 따라 쳤는데, 안됌.. 똑같은데 실행 안돼..
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<Object> handleIllegalArgument(IllegalArgumentException e) {
log.warn("handleIllegalArgument", e);
ErrorCode errorCode = CommonErrorCode.INVALID_PARAMETER;
return handleExceptionInternal(errorCode, e.getMessage());
}
handelExceptrionInternal(errorCode, e.getMessage());
이 부분에서 errorCode 값이 계속 에러 발생..
원인
- import를 잘못된 경로의 것을 주입해주고 있었음...
알게 된 것
- 하나하나 주입할 때 꼼꼼하게 맞는걸 주입하도록 하자..
- 이거 하나로 일출을 보내~~ 개발자 특권이란게 이런건가~
JVM (Java Virtual Machine)
- 자바를 실행하기 위한 가상 컴퓨터. 즉, 컴퓨터 안에 자바를 실행해주는 또 하나의 컴퓨터가 있다
- 자바는 OS에 종속적이지 않다는 특징이 있는데, 이 OS 종속을 받지 않게 하기 위해서 JVM이 필요
- Java 소스코드, 즉 원시코드는 CPU가 인식을 하지 못하기 때문에 Java compiler가 자바 파일(.Java)을 클래스 파일(.class) 즉, 자바 바이트 코드(Java bytecode)로 변환해준다.
- 이 때. JVM은 OS가 자바 바이트 코드를 이해할 수 있도록 해석을 해주기에 OS에 상관없이 자바가 실행 가능한 것
JVM의 구조
- 클래스로더 - JVM내로 클래스 파일을 로드하고 링크를 통해 배치하는 작업을 수행하는 모듈
즉, 클래스를 처음으로 참조할 때, 해달 클래스를 로드하고 링크하는 역할 - 메모리 (런타임 데이터 영역) - JVM이 운영체제 위해서 실행될 때, 할당 받는 메모리 영역이며, 이 영역들을 스레드가 공유하는 공간인지 아닌지로 나눌 수 있음
- 실행엔진 - 메모리에 적재된 바이트 코드를 기계어로 변경하여 명령어 단위로 실행 및 바이트 코드를 운영체제에 맞게 해석해주는 역할이고, 두 가지 방식이 사용된다
- 인터프리터 - 런타임 중에 바이트코드를 한 줄씩 읽고 실행, 컴파일러보다 속도가 느림
- JIT(Just In Time) - 인터프리터의 속도 이슈를 해결하기 위해 사용 (자주 사용, 바이트 콛, 런타임, 기계어, 컴파일)
- GC - 더 이상 사용되지 않는 인스턴스를 찾아 메모리에서 삭제
특징
- 스택 기반의 가상 머신
- 심볼릭 레퍼런스 - 참고 클래스의 메모리 주소를 참조 관계로 구성하는 것이 아닌 대상의 이름만을 지칭한 것
- 가비지 컬렉션
- 기본 자료형을 명확하게 정의하여 플랫폼 독립성 보장
(C++ 등의 전통적인 언어는 플랫폼에 따라 int형의 크기가 변한다. JVM은 안변함) - 네트워크 바이트 오더 - 데이터가 상위 바이트부터 메모리에 적재하여, 가장 최상위 바이트가 가장 낮은 메모리 주소에 저장되는 방식 (리틀, 빅 엔디안 중 빅 엔디안 사용)
Java의 실행방식
- 프로그램 실행 시 JVM이 OS로부터 필요한 메모리 할당
- 자바 파일(자바 코드) => 자바 컴파일러 => 자바 바이트 코드
- 자바 바이트 코드를 클래스 로더를 통해 JVM이 필요한 시점에 로딩
- 기계어로 해석된 바이트 코드는 런타임 데이터 영역(메모리)에 배치되어 수행
- 이때 JVM은 필요에 따라 CG 작업 수행
참고 자료
[Java] JVM이란?
java-study에서 스터디를 진행하고 있습니다. 자바 코드 실행 과정 위 그림은 자바 코드의 실행 과정을 간략하게 보여 준다. 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리
steady-coding.tistory.com
3. https://code-lab1.tistory.com/92
[JAVA] JVM(Java Virtual Machine)이란?
JVM(Java Virtual Machine)이란? JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. JVM은 OS와 Java 애플리케이션 사이의 중개자 역할을 한다. JVM은 자바 바이트코드를 실행할
code-lab1.tistory.com
4. https://happy-coding-day.tistory.com/entry/JVM-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1
'ssung_항해일지 > 항해99_Spring_입문, 숙련, 심화' 카테고리의 다른 글
spring - 21일차 (0) | 2023.02.25 |
---|---|
spring - 20일차 (0) | 2023.02.24 |
spring - 18일차 (0) | 2023.02.21 |
spring - 17일차 (0) | 2023.02.21 |
spring - 15일차 (0) | 2023.02.19 |