2014-11-04 3 views
-1

저는 스토리지 할당이 주 메모리의 적절한 위치에 데이터 코드를 매핑한다는 것을 알고 있습니다. 하지만 왜 자바에서 스택 데이터의 다른 데이터에 대한 별도의 부분은 classInformation 영역, 힙의 동적 (개체) 데이터, ConstantPool의 문자열 데이터 (우리가 만들 때 리터럴을 통해), 메서드 영역의 기능 등에 저장됩니다 그래서 스토리지 할당을 위해서만 메인 메모리에 저장하는 동안 우리의 코드를 깨끗하게 만드는 것뿐만 아니라 액세스의 용이성을 제공하는 것입니까?왜 우리는 컴파일러에서 스토리지 할당이 필요합니까?

답변

2

먼저 질문이 있어야합니다 - JVM에서 다른 저장 영역이 필요한 이유는 무엇입니까?.

JVM의 각 실행 (인스턴스)에는 5 개의 다른 저장 영역이 있습니다.

Shared among all threads running in a JVM instance 
Method Area --> Contains information about classes loaded by the JVM. 
Heap --> common area for allocation of memory. Even String pool is part of this space. 

Separate for each Thread 
Java Stacks --> Contains state of Java (not native level) level methods 
PC registers -> Program counter to keep track of Java method execution. 
Native Method Stacks --> Stack for keeping track/state of native calls (methods). 

더 많은 정보 herehere

+0

아니 내 질문에. 내가 아는 곳 데이터에 대한 약간의 만 (약간은 [가리키고 모든 프로그래밍 언어는 스토리지 할당을 필요로] 특정 스토리지를 JVM에 관련) 컴파일러 특정 그래서 여기에 언급 된 자바에 상주합니다. – Jack

+1

@Jack - 그렇다면 컴파일러가 코드를 컴파일 할 때 주 메모리에 코드를로드 한 다음 우리 프로그램의 다양한 데이터를 주 메모리의 별도 메모리 영역에 저장하는 경우 * – TheLostMind

+0

을 정교하게 작성하십시오 * 왜 컴파일러가 코드에 대한 쉬운 접근과 깨끗한 효율적인 코드를위한 두 가지 이유가 있습니다. – Jack

관련 문제