죄송합니다. 매우 기본적인 컴퓨터 과학 문제입니다. Java Virtual Machine은 0과 1을 생성합니까? 아니면 어셈블리 언어 코드를 생성합니까? 어셈블리 언어 코드를 생성하는 경우 프로세서에 어셈블러가 연결되어 있는데이를 0과 1로 변환합니까? 또는 0과 1을 생성하면 프로세서에 어셈블러가 필요합니까? 그렇다면 무엇을 위해?
죄송합니다. 매우 기본적인 컴퓨터 과학 문제입니다. Java Virtual Machine은 0과 1을 생성합니까? 아니면 어셈블리 언어 코드를 생성합니까? 어셈블리 언어 코드를 생성하는 경우 프로세서에 어셈블러가 연결되어 있는데이를 0과 1로 변환합니까? 또는 0과 1을 생성하면 프로세서에 어셈블러가 필요합니까? 그렇다면 무엇을 위해?
답변:
자바 컴파일러 (JVM이 아닌) Java 소스 코드 (본질적으로 여전히 0과 1이지만, 사람이 처리하기 쉬운 정보, 즉 읽을 수있는 텍스트를 나타낼 수있는 특정 0과 1의 특정 세트, 즉 읽을 수있는 텍스트)를 취하여 다음과 같이 컴파일합니다. 자바 바이트 코드 이것은 다른 의미의 0과 1입니다.
자바 바이트 코드는 개념적으로 "어셈블러"와 같습니다. 단, 플랫폼 독립적 인 명령어는 자바 가상 머신 . JVM은 자바 바이트 코드와 네이티브 바이트 코드 (즉, 실행중인 실제 하드웨어에 대한 기계 명령어) 사이의 "번역자"역할을합니다. 개념적으로 말하면 Nintendo 에뮬레이터와 동일합니다. 컴파일 된 Java를 모든 플랫폼에서 실행할 수 있습니다.
따라서 직접 질문에 대답하십시오 : JVM은 Java 바이트 코드를 생성하지 않습니다. Java 컴파일러는 JVM이 해당 바이트 코드를 해석하고 "일이 일어난다"는 것을 알립니다.
그러나 현대에서는 고급 JVM이 단지 해석하는 것 이상의 의미를 가지고 있습니다. 예를 들어 "들어 본 적이있는"HotSpot 기술을 사용하면 JVM에서 자바 바이트 코드의 어떤 부분이 자주 실행되는지 동적으로 결정할 수 있습니다. 속도를 높이십시오.) 그런 다음 해당 부분을 가져 와서 전체 네이티브 바이트 코드로 변환하십시오 (원래 자바 바이트 코드는 더 이상 해석되지 않고 새롭고 빠른 네이티브 바이트 코드가 직접 실행됩니다). 이것은 모두 Java 프로그램에 투명하게 발생합니다. 오래 전에 자바는 "느린"것에 대해 많은 비판을 가졌지 만 그 당시 핫스팟 (HotSpot)과 유사한 기술의 출현으로 대부분 사라졌습니다.
그래서 의미에서 현대 JVM 해야 할 것 입력 Java 명령어로부터 추가 원시 코드를 생성한다는 점에서 "0과 1"을 생성합니다. 데이터를 "0과 1"로 언급하는 것에 조심해야합니다. ...마다 디지털 데이터 조각은 "0과 1"입니다 (종종 8 개의 2 진수 그룹으로 구성되어 있습니다. "바이트" ), 기계어 코드에서부터 프로그램 소스 코드, 텍스트 이미지, MP3 이미지, 무엇이든간에.
JVM 작동 방식에 대한 좋은 글을 찾을 수있다. 이리 .
Java 언어, Java 바이트 코드 및 컴파일러와 가상 컴퓨터의 동작을 요구하는 매우 구체적인 사양의 경우 언어 및 가상 컴퓨터 사양을 모두 찾을 수 있습니다. 이리 .
그것은 자바 바이트 코드 이것은 JVM 용으로 설정된 특수 명령입니다. 그것은 네이티브 머신 코드 (0과 1)와 동일하지만 같지 않습니다.
여길 봐: Java 바이트 코드 (Wikipedia) (예제 섹션으로 스크롤).