자바 컴파일러는 ByteCode를 생성함 -> .class파일 생성
그리고 jvm실행 시 runtime으로 들어가는데 과거에는 힙 메모리와 스택 메모리 static(Method) area는 과거에 PermGen이였으며 jvm에서 생성됐지만 현재는 클래스 정보가 있는 Metaspace가 jvm메모리가 아닌 jit컴파일러를 거쳐서 네이티브 메모리에 동적으로 할당됨 --> 메모리 관리가 수월해짐
현재는 static(Method or Class) 영역은 없는 것으로 생각 됨
Java Bytecode, 자바 바이트코드
우리는 Java 소프트웨어를 개발하기 위해서 JDK를 설치하고 Java 소프트웨어를 실행시키기 위해서 JRE 를 설치한다.
또한 개발을 하면 실행 결과를 확인하기 위해서 Compile 과정을 거치게 되는데, 이 컴파일은 바로 JDK나 JRE 에 함께 포함되는 javac.exe 실행파일이 수행하는 것이다.
이는 개발자가 작성한 .java 파일을 JVM이 이해할 수 있도록 하는 Bytecode 로 변환하고 .class 파일을 만드는 것을 의미하는데, .class 파일에 존재하는 데이터가 바로 자바 바이트코드, Java Bytecode 인 것이다.
주의해야 할 점이 컴파일 결과 라고 해서 C나 C++이 컴파일하면 생성하는 기계어와 동일하게 생각하면 안 된다. 기계어는 JVM이 다른 모듈을 통해서 생성하고 실행하는데, 이 과정에서 C나 C++에 비해 조금 느린 성능을 내는 것이다.
Java Bytecode 는 우리가 개발한 자바 프로그램(코드)를 배포하는 가장 작은 단위라고 한다.