Java에서 JVM (예 : HotSpot)은 JIT 컴파일이 가능하며이 기술은 바이트 코드를 원시 코드로 컴파일하여 실행 속도를 높이는 데 사용됩니다. 내 질문은 어떻게 기술적으로 이런 일이 일어나는가하는 것입니다. 필자는 현대 프로세서가 메모리 영역을 읽기 전용 섹션과 악의적 인 코드 실행을 방지하기 위해 실행 가능한 섹션으로 표시한다는 사실을 이해했습니다. 따라서 JVM은 실제로 액세스 할 수있는 메모리 공간 (즉, 자체 수정 코드)에 새로운 "실행 코드"를 작성할 수 없습니다. 따라서 JVM이 원시 코드를 생성하고이를 파일에 기록한 다음 운영 체제 서비스를 사용하여 해당 원시 코드를 메모리에 동적으로로드하고 원시 코드 (함수) 위치의 주소에 대한 내부 매핑 테이블을 유지한다고 추측합니다. 운영 체제가이 동적 코드를로드 한 후에 메모리에 저장되므로 기본 명령어로 분기 할 수 있습니다.Java에서 JIT 컴파일은 어떻게 동적으로 컴파일 된 명령어를 메모리에로드합니까?
나는이 대답을 보았습니다 : How is JIT compiled code injected in memory and executed?,하지만 운영 체제가 사용자 프로그램에 READ + EXECUTE 메모리 영역을 허용하는 이유에 대해서는 혼란 스럽습니다. 리눅스 등 다른 운영체제가 JIT가 작동하기 위해 비슷한 것을 제공합니까?
누군가 내 이해를 명확히하는 데 도움이 될 수 있습니까?