2011-08-12 2 views
2

에서 클래스 멤버 함수에 할당되는 방법은 내 비슷한 질문을 발견 :은 메모리가 자바

here

를 찾을 수 있습니다 "? 한 번 또는 객체의 모든 인스턴스에 할당 된 클래스 멤버 함수 코드 메모리가"

그러나 거기에 대한 대답은 C/C++의 경우에 대해서만 이야기했습니다. 누구든지 자바를 사용하고 있다면이 질문에 대한 대답을 말해 줄 수 있습니까?

답변

0

직접적인 대답은 아닙니다.

코드는 클래스가로드 될 때 한 번로드되지만 코드는 다른 클래스의 메서드에 인라인 될 수 있으므로 다른 클래스가로드 될 때마다로드되고 클래스는 가비지 수집되어 나중에 다시로드 될 수 있습니다. 코드가 다시로드됩니다.

할당의 많은 측면은 VM 구현에도 따라 달라집니다.

0

답변은 기본적으로 다른 질문과 동일합니다. 가장 인기있는 Sun/Oracle VM의 경우 : 실행 가능 코드는 JIT (Just-In-Time) 컴파일러에 의해 필요에 따라 코드 캐시로 컴파일되고 Hotspot 컴파일러에 의해 즉석에서 최적화됩니다 (예 : 인라인).

메서드를 메서드 포인터라고하면 메서드 변수 참조 및 값이 컨텍스트로 스택에 저장되고 코드 캐시의 코드가 실행됩니다.

1

는 반원 기능 코드 메모리는 한 번에 할당하거나 오브젝트 중에 1 회, 클래스마다 할당

객체의 모든 인스턴스 이다. 정확히 말하면 클래스/클래스 로더 쌍마다 한 번 할당됩니다. 컴파일러가 JIT 또는 HotSpot이 포함하는 것을 포함하도록 컴파일러를 이해하는 한 컴파일러가 할당한다고 생각할 수 있습니다.

관련 문제