Java

1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.(피드백 feedback)

향찡 2020. 11. 15. 01:05

공통적인 피드백 

1. 이미지를 너무 복사를 함 -> 왠만하면 직접 그리는것을 추천

2. 텍스트도 너무 복사하지 말기, 읽고 이해한대로 다시적기

3. 다른분들이 한 과제를 보기 (깊이가 다들 다르기 때문에)

의문점

자바 14로 컴파일한 .class를 자바 8로 실행하면? -> 안되는게 맞다.

반대로 8로 컴파일 후 .class를 자바 14로 실행하면? -> 된다.

에러 : UnsupportedClassVersionError : 컴파일과 실행에 대한 javaversion이 mismatch가 있어 발생한다.

 

* (추가과제) java compile version option / javac 옵션 조사

 

.class파일에 있는 바이트 코드 보는 방법

javap - c명령으로 가능

 

JIT컴파일러란?

자바를 실행할때 line by line으로 인터프리터하면

코드중에 반복되는 코드가 있다면 JIT가 기계어로 캐싱 후 재사용 (인터프리터로 해석할 캐시에서 꺼내서 바로 실행)

JIT도 일종의 스레드로 실행된다. 

JDK와 JRE

java9부터는 jre가 없다.

javac/ javap는 jdk에 있다.

 

java8부터는 client Compiler와 server Compiler옵션에 대해 신경 쓸 필요없다.

 

컴파일 타임

javac를 실행할때의 타임, IDE에서 코딩하는 순간

런타임

java를 실행하면서 발생

언제 에러가 나는게 더 좋은가요? 컴파일 타임,,,,

 

바이트코드가 기계어(=바이너리코드)는 아니다. 

바이트코드는 JVM이 이해할수있는 코드다.

 

+ 추가 조사

바이트 코드는 플랫폼 독립적이며, 윈도우에서 실행되는 컴파일러로 컴파일 된 바이트 코드는 여전히 linux / unix / mac에서 실행됩니다. 기계어 코드(바이너리 코드)는 플랫폼에 따라 다르며 Windows x86에서 컴파일 된 경우 Windows x86에서만 실행됩니다.(stackoverrun.com/ko/q/10525060)