인프런 커뮤니티 질문&답변

void님의 프로필 이미지
void

작성한 질문수

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

생산자 소비자 대기 공간 분리 - 예제5 분석

jvm 구현에 따라 vs java 버전과 구현에 따라

작성

·

165

·

수정됨

0

notify / signal 차이점 설명하시면서

1) java 버전과 구현에 따라 다르다.

2) jvm 구현에 따라 다르다.

라고 말씀하시는데, 이 둘간의 정확한 차이가 뭔지 궁금합니다.

 

제 지식으로는 아래 정도로 보이는데,

1) java 라이브러리단에서 구현된 방식(=디컴파일을 통해 내부 로직을 알수있음, 컴파일러 버전에 영향)

vs

2) jvm 내부에 구현된 방식(=디컴파일해서는 내부 로직 알수없음, 컴파일러가 아닌 런타임에 사용된 java 버전에 영향)

로 보면 되는가요?

 

1) java 구현: 컴파일시 사용된 java 구현체( .java -> .class 변환)

2) jvm 구현 : 런타임에 사용되는 jvm 구현체?(.class 구동)

 

답변 1

0

안녕하세요. void님, 공식 서포터즈 David입니다.

해당 언급의 핵심은 특정 기능이 어떻게 동작해야 하는지 JVM 스펙으로 명시된 사항이 아니기 때문에 구현체의 구현에 따라 달라진다입니다.

자바는 JDK라는 자바개발도구를 지원하며, JDK는 JVM을 포함하고 있습니다.

자바 버전이 다르다는 말은 JDK의 버전이 다른 것을 말하며 자바 버전이 다르다는 것은 내부에 포함된 JVM의 버전이 다를 수 있다는 말입니다.

JVM 스펙은 다음 문서를 참고해 주세요. https://docs.oracle.com/javase/specs/

감사합니다.

void님의 프로필 이미지
void
질문자

답변 감사합니다.

구현체에 따라 달라진다는게 핵심인건 알겠습니다.

다만, 아래처럼 설명을 해주셨는데

--

notify는 jvm 구현체에 따라 동작이 다르다.

signal은 java 버전과 구현체에 따라 동작이 다르다.

--

java > jdk > jvm 처럼 포함관계라서 거의 같다고 볼수 있는데, java 구현체에 따라 동작이 다르다. jvm 구현체에 따라 동작이 다르다.. 와 같이 구분해서 언급을 하셔서 의도가 궁금했습니다.

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. void님

David님께서 말씀하신 것 처럼, 이 문맥에서는 java, jdk, jvm이라고 표현할 때는 같은 표현으로 이해하시면 됩니다 🙂

감사합니다.

void님의 프로필 이미지
void

작성한 질문수

질문하기