그래서 나는이 방법은 자바로 작성했습니다 :JIT 컴파일 된 코드는 어디에 있습니까?
public void myMethod(int y){
int x = 5 + y;
doSomething(x);
}
그리고
자바 가상 머신에이 방법을 위해 컴파일 된 코드를 실행할 때 .. 내 응용 프로그램이이 시대의 많은 호출 가정, JVM는 것이다 먼저이 방법을 해석하십시오. 그리고 얼마 후, 올바르게 이해하면 기계어로 컴파일하기로 결정할 것입니다. 이 시점에서 ,는이 메모리 머신 코드로 덮어 쓸 수 있을까요? 덮어 쓴다면 크기 차이 문제는 어떻게 해결됩니까? 메모리의 다른 위치에 쓰여지는 경우 바이트 코드가 메모리에로드되거나 해제됩니까? 또한 바이트 코드와 jit 컴파일 된 코드가 모두 메모리에있는 경우 응용 프로그램이이 메서드에 다시 도달하면 JVM은 바이트 코드 대신 jit 컴파일 된 코드를 어떻게 실행하기로 결정합니까?
이런 종류의 일은 당신이 윈도우 머신에서 실행 중인지 아니면 RAM이 부족한 마이크로 컨트롤러에서 실행 중인지에 달려 있다는 생각이 들었다. 다른 말로하면, 플랫폼 의존, 아니? – Ghostkeeper
답변 1 : 왜 신경 쓰시겠습니까? 답변 2 : JVM은 클래스 객체의 내부 표현에서 테이블을 통해 링크 된 C 힙의 각 메소드에 대한 JITCed 코드를 유지합니다. 코드는 JVM이 끝나거나 클래스가 "언로드"되는 드문 경우에만 삭제됩니다. 그것은 모두 적절한 마술에 의해 관리됩니다. –
"C 힙"은 정말로 잘못된 이름입니다. malloc (페이지 정렬 일 수도 있고 아닐 수도 있습니다) 호출을 사용하여 얻은 메모리를 참조하는 경우 해당 페이지는 실행 가능으로 표시되어야합니다. 아마도 JIT는 mmap, VirtualAlloc 등을 사용하여 생성 된 코드에 메모리를 할당합니다. –