4

에 Java 프로그램 매핑 : 자바 프로그램이 OS의 프로세스에 매핑되는 방법 (아래 Linux 용 그림과 같은) : C에서
borrowed from: linuxjournal.com내가 이런 방법 궁금 운영 체제 프로세스를

, 그건 프로그램 작성 방법과 전체 호출 스택이 OS에서 어떻게 진행되는지에 대한 직접적인 연관성. Java에서 매핑이 어떻게 이루어 지는지 궁금합니다. 메소드 meth()가 객체를 호출 할 때 : obj, 그냥 obj.meth()의 주소를 찾은 다음 &을 스택에 저장하면 C 언어로 사용됩니다.

미리 감사드립니다.

편집 : 다른 OOP 언어가 일반적으로 사용하는 모델 (C++, Python 등)을 알고 싶습니다.

+0

C의 경우에도 주어진 그림은 이미 심각하게 단순화되어 있습니다. 예를 들어, 반드시 힙이 하나만있는 것은 아닙니다 (메모리를 할당하려는 스레드가 많은 경우 한 힙을 갖는 것이 좋지 않습니다). 스레드 특정 데이터 등이 있습니다. 악마가 세부 사항에 있고 간단한 C 런타임이 얼마나 복잡한 지 생각하면 JVM이 어떻게 보이는지 상상해보십시오 :) – Voo

+0

물론 단일 스레드 프로세스의 간단한 사례에 대해 논의하고 싶습니다. –

답변

4

꽤 복잡한 문제입니다. 이 주제에 관해서는 꽤 좋은 article입니다. 즉, Java는 메모리 레이아웃에 큰 영향을 미치는 두 가지 실행 모드를가집니다.

  1. 일부 코드가 intepreter
  2. 일부 코드에 의해 실행은 성능 향상을 위해 네이티브 코드로 컴파일됩니다.

이 위키 페이지를 참조하십시오 : http://en.wikipedia.org/wiki/Just-in-time_compilation.

그리고 JVM 등 파마 세대, JIT 메모리, 같은 메모리 영역의 많은 종류를 가지고

이 다른 스레드에서 잘 설명되어 있습니다 :

  1. java and memory layout
  2. jdk1.6 memory layout
+2

다른 두 스레드에서 "잘 논의"되었다고 말할 수 없습니다. 그러나 JVM의 메모리 레이아웃은 매우 복잡합니다. a) 많은 사람들이이 질문에 심각하게 대답 할 수는 없습니다 (나는 기억 공간이 무엇인지, 기본적으로 무엇을하는지, 레이아웃이나 기타 세부 사항을 알고 있습니까? bite) 누군가가 원할지라도 그것은 꽤 다루기 힘든 게시물이 될 것입니다. 그것이 SO에 잘 맞는지 확실하지 않습니다. – Voo

1

대부분의 Java JVM은 일반 C 프로그램입니다. 따라서 사진은 해석되고 실행되는 첫 번째 클래스 파일까지 동일한 쓰기가됩니다.

그 후에는 JVM 구현에 따라 다릅니다. 일반적으로 스택 저장소를 사용하여 어떤 클래스가로드되는지, 어떤 스레드가 실행 중인지와 같은 제어 유형 정보를 추적합니다. 실제 "프로그램"저장소의 경우 인터프리터 및 가비지 수집기는 일반 "malloc"/ "mfree"를 사용하여 메모리를 할당하고 해제하고 가비지 컬렉터가 작동 할 수 있도록 몇 가지 복잡한 제어 구조를 추가합니다.